Comment changer le classement de la firebase database, de la table, de la colonne?

Maintenant, la firebase database est latin1_general_ci et je veux changer le classement en utf8_general_ci . Y at-il un paramètre dans PhpMyAdmin pour changer le classement de la firebase database, de la table, de la colonne? Plutôt que de changer un par un?

Vous devez soit convertir chaque table individuellement:

 ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 

(cela convertira aussi bien les colonnes), ou exportez la firebase database avec latin1 et importez-la avec utf8 .

Je consortingbue ici, comme l’OP a demandé:

Comment changer le classement de la firebase database, de la table, de la colonne?

La réponse sélectionnée l’indique simplement au niveau de la table.


Changer la firebase database large:

 ALTER DATABASE  CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

Le changer par table:

 ALTER TABLE  CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

La bonne pratique consiste à le changer au niveau de la table car cela le changera également pour les colonnes. Changer pour une colonne spécifique est pour tout cas spécifique.

Modification du classement pour une colonne spécifique:

 ALTER TABLE  MODIFY  VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

Vous pouvez exécuter un script php.

  < ?php $con = mysql_connect('localhost','user','password'); if(!$con) { echo "Cannot connect to the database ";die();} mysql_select_db('dbname'); $result=mysql_query('show tables'); while($tables = mysql_fetch_array($result)) { foreach ($tables as $key => $value) { mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); }} echo "The collation of your database has been successfully changed!"; ?> 

Pour modifier le classement des tables individuellement, vous pouvez utiliser,

 ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 

Pour définir le classement par défaut pour toute la firebase database,

 ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 

ou sinon,

Allez à PhpMyAdmin-> Operations-> Collation.

Vous y trouverez la boîte de sélection qui contient tous les classements existants. Donc, ici, vous pouvez changer votre classement. Donc, ici, après la table de firebase database suivra ce classement pendant que vous créez une nouvelle colonne. Pas besoin de collation sélective lors de la création de nouvelles colonnes.

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) valeur par défaut du serveur 3) valeur par défaut de la firebase database 4) colonne par défaut 5) colonne

Si vous exécutez phpMyAdmin >> select database >> sélectionnez la table >> allez dans l’onglet “Opérations” >> dans la section “Options de la table” >>, vous pouvez sélectionner Collation dans la liste déroulante >> et une fois que vous appuyez sur {Go} En haut de l’écran, vous verrez un message:

Votre requête SQL a été exécutée avec succès

et un script

 ALTER TABLE `tableName` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci 

Mais cela ne changera PAS les classements des colonnes existantes. Pour ce faire, vous pouvez utiliser ce script (celui-ci provient également de phpMyAdmin)

 ALTER TABLE `tableName` CHANGE `Name` `Name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 

La requête suivante génère des requêtes ALTER qui modifient le classement de toutes les colonnes appropriées de toutes les tables en un certain type (utf8_general_ci dans mon exemple ci-dessous).

 SELECT concat ( 'ALTER TABLE ', t1.TABLE_SCHEMA, '.', t1.table_name, ' MODIFY ', t1.column_name, ' ', t1.data_type, '(' , CHARACTER_MAXIMUM_LENGTH, ')', ' CHARACTER SET utf8 COLLATE utf8_general_ci;' ) from information_schema.columns t1 where t1.TABLE_SCHEMA like 'you_db_name_goes_here' AND t1.COLLATION_NAME IS NOT NULL AND t1.COLLATION_NAME NOT IN ('utf8_general_ci'); 

J’ai été surpris d’apprendre, et je devais donc revenir ici et signaler que l’excellent et bien entretenu Interconnect / it SAFE SEARCH SEADABASE a un certain nombre d’options pour convertir des tables en utf8 / unicode, et même convertir en innodb . C’est un script couramment utilisé pour migrer un site Web piloté par une firebase database (WordPress, Drupal, Joomla, etc.) d’un domaine à un autre.

interconnecter des boutons de script

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 en empêchant les requêtes doubles. Si je pouvais voter, j’aurais voté la réponse de hkasera.

 < ?php $conn1=new MySQLi("localhost","user","password","database"); if($conn1->connect_errno){ echo mysqli_connect_error(); exit; } $res=$conn1->query("show tables") or die($conn1->error); while($tables=$res->fetch_array()){ $conn1->query("ALTER TABLE $tables[0] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci") or die($conn1->error); } echo "The collation of your database has been successfully changed!"; $res->free(); $conn1->close(); ?> 

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:

 DELIMITER $$ DROP PROCEDURE IF EXISTS changeCollation$$ -- character_set parameter could be 'utf8' -- or 'latin1' or any other valid character set CREATE PROCEDURE changeCollation(IN character_set VARCHAR(255)) BEGIN DECLARE v_finished INTEGER DEFAULT 0; DECLARE v_table_name varchar(255) DEFAULT ""; DECLARE v_message varchar(4000) DEFAULT "No records"; -- This will create a cursor that selects each table, -- where the character set is not the one -- that is defined in the parameter DECLARE alter_cursor CURSOR FOR SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND COLLATION_NAME NOT LIKE CONCAT(character_set, '_%'); -- This handler will set the value v_finished to 1 -- if there are no more rows DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1; OPEN alter_cursor; -- Start a loop to fetch each rows from the cursor get_table: LOOP -- Fetch the table names one by one FETCH alter_cursor INTO v_table_name; -- If there is no more record, then we have to skip -- the commands inside the loop IF v_finished = 1 THEN LEAVE get_table; END IF; IF v_table_name != '' THEN IF v_message = 'No records' THEN SET v_message = ''; END IF; -- This technic makes the sortingck, it prepares a statement -- that is based on the v_table_name parameter and it means -- that this one is different by each iteration inside the loop SET @s = CONCAT('ALTER TABLE ',v_table_name, ' CONVERT TO CHARACTER SET ', character_set); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET v_message = CONCAT('The table ', v_table_name , ' was changed to the default collation of ', character_set, '.\n', v_message); SET v_table_name = ''; END IF; -- Close the loop and the cursor END LOOP get_table; CLOSE alter_cursor; -- Returns information about the altered tables or 'No records' SELECT v_message; END $$ DELIMITER ; 

Une fois la procédure créée, appelez-la simplement:

 CALL changeCollation('utf8'); 

Pour plus de détails, lisez ce blog .

Vous pouvez simplement append ce code au fichier script

 //Database Connection $host = 'localhost'; $db_name = 'your_database_name'; $db_user = 'your_database_user_name'; $db_pass = 'your_database_user_password'; $con = mysql_connect($host,$db_user,$db_pass); if(!$con) { echo "Cannot connect to the database ";die();} mysql_select_db($db_name); $result=mysql_query('show tables'); while($tables = mysql_fetch_array($result)) { foreach ($tables as $key => $value) { mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"); } } echo "The collation of your database has been successfully changed!"; 

si vous souhaitez mettre à jour le jeu de caractères par défaut sur un schéma:

  ALTER SCHEMA MYSCHEMA DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; 

J’ai utilisé le script shell suivant. Il prend le nom de la firebase database comme paramètre et convertit toutes les tables en un autre jeu de caractères et un autre classement (donné par un autre paramètre ou une valeur par défaut définie dans le script).

 #!/bin/bash # mycollate.sh  [ ] # changes MySQL/MariaDB charset and collation for one database - all tables and # all columns in all tables DB="$1" CHARSET="$2" COLL="$3" [ -n "$DB" ] || exit 1 [ -n "$CHARSET" ] || CHARSET="utf8mb4" [ -n "$COLL" ] || COLL="utf8mb4_general_ci" echo $DB echo "ALTER DATABASE $DB CHARACTER SET $CHARSET COLLATE $COLL;" | mysql echo "USE $DB; SHOW TABLES;" | mysql -s | ( while read TABLE; do echo $DB.$TABLE echo "ALTER TABLE $TABLE CONVERT TO CHARACTER SET $CHARSET COLLATE $COLL;" | mysql $DB done ) 

Mode rapide – exportation vers un fichier SQL, utilisez la recherche et le remplacement pour modifier le texte à modifier. Créez une nouvelle firebase database, importez les données, puis renommez l’ancienne firebase database et la nouvelle à l’ancien nom.

Il suffit de lancer ce SQL. Changez votre COLLATION à ce dont vous avez besoin et à databaseName.

 SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," COLLATE utf8_general_ci;") AS ExecuteTheSsortingng FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="databaseName" AND TABLE_TYPE="BASE TABLE";