web-dev-qa-db-fra.com

Comment définir character_set_database et collation_database sur utf8 dans my.ini?

J'ai googlé beaucoup sur ce problème. Pour résumer, voici ce que mon my.ini ressemble à:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[client]
database = abcdef
user = root
password = XXXXXX
default-character-set = utf8

[mysql]
default-character-set=utf8

[mysqld]
character_set_server=utf8
max_connections = 200
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 

Quand je vais dans mysql via cmd et émets: show variables like "%character%";show variables like "%collation%";, voici ce que j'ai:

+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| character_set_client     | utf8                            |
| character_set_connection | utf8                            |
| character_set_database   | latin1                          |
| character_set_filesystem | binary                          |
| character_set_results    | utf8                            |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | D:\env\MySQL5.6\share\charsets\ |
+--------------------------+---------------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | utf8_unicode_ci   |
+----------------------+-------------------+

J'ai déjà redémarré le service MySQL, donc quelqu'un pourrait-il me donner une idée de la façon de modifier character_set_database aussi bien que collation_database à utf8? Merci beaucoup.

26
Judking

Ce n'est en fait pas un paramètre dans le my.cnf (ou my.ini dans ce cas). mySQL obtient ce paramètre du propre classement de la base de données (quand il a été créé). Pour obtenir cela en ligne avec l'encodage utf8 que vous souhaitez, procédez comme suit:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;

puis faites un redémarrage sur mysql (je ne peux pas me rappeler si c'est nécessaire), suivi d'un:

SHOW VARIABLES;

Tout devrait bien aller, j'espère que ça aide!


note de côté: je pense que default-character-set est obsolète de nos jours (mySQL 5.5+) et semble rendre le fichier de configuration agité.

42
C Jones

Je fais un résumé:

déterminez quels jeux de caractères/collations sont disponibles

SHOW CHARSET;
SHOW COLLATION;

vérifier le jeu de caractères

SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';

set charset (dans le fichier de configuration -> my.cnf)

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

vérifier le jeu de caractères de la base de données/table

SHOW CREATE DATABASE databasename;
SHOW CREATE TABLE tablename;

changer le jeu de caractères de la base de données/table

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

défini lors de la création de la base de données/table:

CREATE DATABASE new_db CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
CREATE TABLE new_table (id INT) CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

Note : J'ai entendu dire que dans Mysql utf8 n'est pas le vrai utf8 , utf8mb4 est le vrai utf8. donc, si vous avez un caractère spécial qui ne peut pas être sauvegardé dans mysql, vous devriez peut-être utiliser utf8mb4 et utf8mb4_general_ci

17
tinyhare

Comment configurer Character Set et Collation.

Pour les applications qui stockent des données à l'aide du jeu de caractères et du classement MySQL par défaut (latin1, latin1_swedish_ci), aucune configuration spéciale ne devrait être nécessaire. Si les applications nécessitent un stockage de données à l'aide d'un jeu de caractères ou d'un classement différent, vous pouvez configurer les informations de jeu de caractères de plusieurs manières:

  • Spécifiez les paramètres de caractères par base de données. Par exemple, les applications qui utilisent une seule base de données peuvent nécessiter utf8, alors que les applications qui utilisent une autre base de données peuvent nécessiter des sjis.
  • Spécifiez les paramètres des caractères au démarrage du serveur. Cela oblige le serveur à utiliser les paramètres donnés pour toutes les applications qui ne prennent pas d'autres dispositions.
  • Spécifiez les paramètres des caractères au moment de la configuration, si vous créez MySQL à partir de la source. Cela oblige le serveur à utiliser les paramètres donnés pour toutes les applications, sans avoir à les spécifier au démarrage du serveur.

Les exemples présentés ici pour votre question pour définir le jeu de caractères utf8, définissent également ici le classement pour plus utile (utf8_general_ci collation`).

Spécifiez les paramètres de caractères par base de données

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

Spécifiez les paramètres des caractères au démarrage du serveur

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Spécifiez les paramètres de caractères lors de la configuration de MySQL

Shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

Cette réponse peut être longue, mais vous pouvez l'utiliser. J'espère que ma réponse vous sera utile. pour plus d'informations http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

7
Vipin Jain