À l'aide de utf8mb4 dans MySQL
Pour l'utilisation de 4 octets utf8mb4
dans MySQL (article 5.6.11), j'ai mis les variables suivantes dans le my.ini
fichier (my.cnf
n'est pas trouvé). Ce fichier se trouve dans un dossier caché nommé Application Data
(C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.6
) sur Windows XP. Il n'est pas disponible dans le répertoire d'installation.
[client]
port=3306
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
Puis en émettant la commande suivante,
SHOW VARIABLES
WHERE Variable_name
LIKE 'character\_set\_%'
OR Variable_name LIKE 'collation%';
encore affiche la liste ci-dessous.
À partir de l'image elle-même, il est clair que plusieurs variables sont encore à l'aide de 3 octets utf8
.
Avant cela, la commande suivante a déjà été délivré à faire des changements correspondants dans la base de données elle-même.
ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Et la commande suivante a également été publiée sur chaque table dans ladite base de données.
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Néanmoins, ce qui est la raison pour laquelle certaines variables n'ont pas encore été fixée au dit jeu de caractères ainsi que le classement? Ce qui est absent?
Le système (système d'exploitation) lui-même a été redémarré après chaque tâche spécifiée ci-dessus ont été réalisées.
init-connect='SET NAMES utf8mb4'
.OriginalL'auteur Tiny | 2015-02-16
Vous devez vous connecter pour publier un commentaire.
La client généralement définit ces valeurs lors de la connexion. Les paramètres de ma.ini sont simplement les valeurs par défaut qui s'appliquent lorsque le client ne spécifie pas explicitement une connexion encodage. Depuis qu'ils sont peu fiables, chaque client devrait spécifier un encodage de la connexion. Puisque vous avez un peu de fantaisie capture d'écran il y a j'imagine que vous vous connectez avec certains GUI utilitaire qui a probablement explicitement ne définir une connexion encodages.
PHP exemple de configuration d'une connexion charset:
characterEncoding
est fixé àUTF-8
,useUnicode
àtrue
etcharacterSetResults
àUTF-8
. En fait, ils servent le but des paramètres qui sont ajoutés à une chaîne de connexion avec la même paire nom/valeur. (La capture d'écran a été prise à partir de MySQL WorkBench. MySQL terminal n'a pas été l'ouverture à certains des raisons obscures, depuis MySQL a été installé. L'écran clignote pendant un certain temps et disparaît, lorsquemysql.exe
est un double-clique. Alors, j'utilise WorkBench)Si votre client va déclarer sa propre
utf8mb4
connexion encodage, alors oui, c'est de ne pas être inquiet. Vous n'avez pas besoin de toucher mes.ini à trouver un utf8mb4 workflow va.J'ai réussi à démarrer MySQL en ligne de commande en quelque sorte. Il ne définit ces valeurs à
utf8mb4
, quandskip-character-set-client-handshake
est utilisé. Sur MySQL WorkBench, il nécessite une commande manuelleSET NAMES 'utf8mb4';
d'être publié qui met l'ensemble de ces valeurs dansutf8mb4
, mais laisse encorecollation_connection
à sa valeurutf8mb4_general_ci
.character_set_system
d'autre part, reste stationnaire dans tous les casutf8
.de toute façon pour configurer Mysql Workbench pour utiliser utf8mb4 par défaut afin de l'émission noms de utf8mb4 n'est pas nécessaire à chaque fois que je me connecter?
OriginalL'auteur deceze
Si vous montrez vos variables globales, vous pouvez voir que tous vos paramètres sont corrects en fait.
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
Cela pourrait être lié à cette bug
J'ai aussi été confronté au même problème dans le passé. J'ai changé un DB jeu de caractères à partir de l'utf8 pour utf8mb4. L'exécution des requêtes directement à partir de ligne de commande de mysql a été ok, mais j'ai eu des problème d'insérer des émoticônes avec Workbench. J'ai fini par mettre manuellement en exécutant
SET NAMES 'utf8mb4'
chaque fois que j'ouvre une connexion à ma base avec Workbench.
À l'aide de Suite Pro comme alternative était très bien ainsi.
OriginalL'auteur Grid Vost
Je pense que vous êtes connecté en tant que root, d'où le
init-connect='SET NAMES utf8mb4'
n'est pas exécutée.Il est déconseillé de l'utiliser root (ou SUPER) pour toute demande de code; seulement pour les actes administratifs.
En général, il est question de sécurité. Si un pirate peut obtenir dans un client et de découvrir le mot de passe root, puis il peut détruire non seulement la base de données, mais peut-être la machine c'est sur. Et, si vous avez plusieurs utilisateurs, il est préférable de faire une certaine quantité d'isolement entre eux. Par le code de l'application je veux dire à la fois les utilisateurs finaux (qui, en général, ne devrait pas avoir de connexion à mysql) et de l'application des couches (Java, etc) qui agissent en leur nom.
Et, peut-être, vous avez trouvé le petit célèbre mise en garde à propos de
root
sauterinit-connect
?utf8mb4
semble être fixé, lors de laskip-character-set-client-handshake
est utilisé. Je ne sais même pas ce que cela signifie (je pense que son utilisation est déconseillée). SGBDR est quelque chose qui est bien au-delà de moi 🙂OriginalL'auteur Rick James
Sur win7
utilisation "win + R" et tapez "services.msc"
de trouver le service de mysql
vérifiez le chemin d'accès au fichier. Il vous dira où le mon.ini
ouvrir et ajouter quelques propriétés:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
classement de serveur = utf8mb4_unicode_ci
redémarrer le service mysql
OriginalL'auteur idaren