La base de données est latin1_general_ci
maintenant et je veux changer le classement enutf8mb4_general_ci
.
Existe-t-il un paramètre dans PhpMyAdmin pour modifier le classement de la base de données, de la table, de la colonne? Plutôt que de changer un par un?
Réponses:
Vous devez soit convertir chaque table individuellement:
(cela convertira également les colonnes), ou exportez la base de données avec
latin1
et réimportez-la avecutf8mb4
.la source
@rsensan
:CONVERT
modifiera également le classement des colonnes.database
DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;MYTABLE
CONVERT EN CARACTER SET SET utf8mb4 COLLATE utf8mb4_unicode_ci; Veuillez ne plus utiliser utf8_general_ci ;-)Je contribue ici, comme l'OP l'a demandé:
La réponse sélectionnée l'indique simplement au niveau de la table.
Modification de la base de données à l'échelle:
Changer par table:
La bonne pratique consiste à le modifier au niveau de la table car il le modifiera également pour les colonnes. Changer pour une colonne spécifique est pour n'importe quel cas spécifique.
Modification du classement pour une colonne spécifique:
la source
SELECT table_schema , table_name , column_name , COLLATION_NAME , COLUMN_TYPE FROM information_schema.columns WHERE collation_name != 'utf8_general_ci' AND table_schema not in ('information_schema','mysql', 'performance_schema','sys');
Vous pouvez exécuter un script php.
la source
Pour modifier le classement des tables individuellement, vous pouvez utiliser,
Pour définir le classement par défaut pour toute la base de données,
ou sinon,
Goto PhpMyAdmin-> Operations-> Collation.
Là, vous trouverez la boîte de sélection qui contient tous les classements existants. Pour qu'ici vous puissiez changer votre classement. Donc, ici, après que la table de base de données suivra ce classement pendant que vous créez une nouvelle colonne. Pas besoin de sélectionner le classement lors de la création de nouvelles colonnes.
la source
La requête suivante va générer des requêtes ALTER qui modifient le classement de toutes les colonnes appropriées dans toutes les tables en un certain type (utf8_general_ci dans mon exemple ci-dessous).
la source
information_schema.tables
et le code en concatALTER TABLE 'schema'.'table' CHARACTER SET = utf8mb4 , COLLATE = utf8mb4_bin ;
Si vous exécutez phpMyAdmin >> sélectionnez la base de données >> sélectionnez la table >> allez dans l'onglet "Opérations" >> dans la section "Options de la table" >> vous pouvez choisir le classement dans la liste déroulante >> et une fois que vous appuyez sur {Go} au en haut de l'écran, vous verrez un message:
et un script
Mais cela ne changera PAS les classements des colonnes existantes. Pour ce faire, vous pouvez utiliser ce script (celui-ci provient également de phpMyAdmin)
la source
vous pouvez définir le classement par défaut à plusieurs niveaux:
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
1) client 2) serveur par défaut 3) base de données par défaut 4) table par défaut 5) colonne
la source
Exécutez simplement ce SQL pour convertir toutes les tables de base de données à la fois. Modifiez votre COLLATION et databaseName en fonction de vos besoins.
la source
Vous pouvez modifier le CHARSET et la COLLATION de toutes vos tables via le script PHP comme suit. J'aime la réponse de hkasera mais le problème est que la requête s'exécute deux fois sur chaque table. Ce code est presque le même sauf en utilisant MySqli au lieu de mysql et la prévention des doubles requêtes. Si je pouvais voter, j'aurais voté la réponse de hkasera.
la source
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin
.Vous pouvez simplement ajouter ce code au fichier de script
la source
J'ai été surpris d'apprendre, et j'ai donc dû revenir ici et signaler, que l'excellent et bien entretenu Interconnect / it SAFE SEARCH AND REPLACE ON DATABASE script a quelques options pour convertir les tables en utf8 / unicode, et même pour convertir en innodb . Il s'agit d'un script couramment utilisé pour migrer un site Web basé sur une base de données (Wordpress, Drupal, Joomla, etc.) d'un domaine à un autre.
la source
Je l'ai lu ici, que vous devez convertir chaque table manuellement, ce n'est pas vrai. Voici une solution pour le faire avec une procédure stockée:
Une fois la procédure créée, appelez-la simplement:
Pour plus de détails, lisez ce blog .
la source
si vous souhaitez mettre à jour le jeu de caractères par défaut sur un schéma:
la source
J'ai utilisé le script shell suivant. Il prend le nom de la base de données comme paramètre et convertit toutes les tables en un autre jeu de caractères et classement (donné par un autre paramètre ou une valeur par défaut définie dans le script).
la source
Ma solution est une combinaison de @Dzintars et @Quassnoi Answer.
En utilisant
CONVERT TO
, cela génère un script, qui convertit toutes les tables de<your-database>
votre encodage demandé. Cela modifie également l'encodage de chaque colonne !la source
Meilleure variante pour générer un script SQL par requête SQL. Cela ne ruinera pas les valeurs par défaut / nulles.
la source
Un moyen rapide - exporter vers un fichier SQL, utiliser la recherche et remplacer pour changer le texte que vous devez changer. Créez une nouvelle base de données, importez les données, puis renommez l'ancienne base de données et la nouvelle en l'ancien nom.
la source
Pour modifier le classement de tous les champs dans toutes les tables d'une base de données à la fois:
J'étais en train d'ajouter une autre boucle pour les champs dans les tables à la solution via Php avant mentionné. Cela a aidé, tous les champs des tables sont également convertis.
la source
Je viens d'écrire un script bash pour trouver toutes les tables dans une base de données donnée et les convertir (et ses colonnes).
Le script est disponible ici: https://github.com/Juddling/mysql-charset
la source