it-swarm.it

Come configurare il set di caratteri globale su MySQL

Ho provato a cambiare il set di caratteri per il nostro MySQL tramite my.cnf e non è riuscito. Ho aggiunto le impostazioni del set di caratteri elencate di seguito:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

Quando li ho abilitati, MySQL non è stato avviato. Come posso assicurarmi che tutto sia impostato su utf8 - sempre?

pdate

Ci sono ancora alcuni posti che hanno problemi ad essere UTF8

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Sfortunatamente non ho ancora trovato un soluton ... qualche idea?

Attualmente sto usando questa configurazione con successo:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

Ma PHPMyAdmin mostra ancora un po 'di latino1

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci
12
Webnet

Devi incorporare quanto segue nel tuo file my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Puoi trovare maggiori informazioni nelle seguenti pagine di manuale

In risposta alla risposta di Mark, se è necessario convertire tabelle/database esistenti nel set di caratteri corretto, sarà necessaria una query ALTER adatta. Qualcosa di simile al seguente:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

In alternativa c'è un ottimo PHP qui che lo fa per te.

23
Ben Swinburne

La risposta di Ben è ok, ma la modifica delle impostazioni NON ASSOLUTAMENTE altererà i set di caratteri o le regole di confronto delle tabelle esistenti. Fallo con un'istruzione ALTER TABLE appropriata.

Se non lo si specifica, le tabelle vengono create nel set di caratteri predefinito del database. Questa è un'impostazione per database che può essere regolata con ALTER DATABASE. Anche questo non è impostato in my.cnf.

2
MarkR