Ahora la base de datos es latin1_general_ci
y quiero cambiar la intercalación a utf8_general_ci
. ¿Hay alguna configuración en PhpMyAdmin para cambiar la intercalación de la base de datos, tabla, columna? En lugar de cambiar uno por uno?¿Cómo cambiar la intercalación de la base de datos, tabla, columna?
Respuesta
Necesitas o bien convertir cada tabla individualmente:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
(Esto convertirá las columnas igual de bien), o exportar la base de datos con latin1
e importar de nuevo con utf8
.
pero quiero cambiar la recopilación de columnas. Esto cambiará solo la intercalación de tablas. – user158469
'@ rsensan':' CONVERT' también cambiará la intercalación de columnas. – Quassnoi
Se puede hacer con script php. – hkasera
puede establecer colación por defecto en varios niveles:
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
1) cliente predeterminado 5) columna 4) tabla predeterminada 3) la base de datos por defecto 2) servidor
Puede ejecutar 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!";
?>
muchas gracias hermano. :) –
Buen trabajo. Vida salvada ... Gracias –
Para cambiar la intercalación de tablas individual que puede utilizar,
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
Para establecer colación por defecto para toda la base de datos,
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
o de lo contrario,
Goto PhpMyAdmin -> Operaciones-> Clasificación.
Ahí encuentra el cuadro de selección que contiene todas las intercalaciones existentes. Para que aquí puedas cambiar tu intercalación. Entonces aquí después de la tabla de la base de datos seguirá esta intercalación mientras está creando una nueva columna. No es necesario seleccionar una intercalación mientras se crean nuevas columnas.
Muchas gracias, esto fue útil – JoZ3
Puede cambiar el CHARSET y COLLATION de todas sus tablas mediante el script PHP de la siguiente manera. Me gusta la respuesta de hkasera, pero el problema es que la consulta se ejecuta dos veces en cada tabla. Este código es casi el mismo excepto que se usa MySqli en lugar de mysql y la prevención de doble consulta. Si pudiera votar, hubiera votado la respuesta 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();
?>
Lo leí aquí, que necesita convertir cada tabla manualmente, no es cierto. Aquí es una solución de cómo hacerlo con un procedimiento almacenado:
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 trick, 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 ;
Después del procedimiento, se crea lo llaman simplemente:
CALL changeCollation('utf8’);
Para más detalles, lea este blog.
Si ejecuta phpMyAdmin >> seleccione la base de datos >> seleccione la tabla >> vaya a la pestaña "Operaciones" >> en la sección "Opciones de tabla" >> puede seleccionar la intercalación de la lista desplegable >> y una vez que presione { ir} en la parte superior de la pantalla aparecerá un mensaje:
Su consulta SQL se ha ejecutado con éxito
y un guión
ALTER TABLE `tableName` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Pero NO cambiará las intercalaciones de columnas existentes. Para hacerlo puede utilizar este script (éste también vino de phpMyAdmin)
ALTER TABLE `tableName` CHANGE `Name` `Name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
manera rápida - la exportación a archivo SQL, buscar y reemplazar el uso para cambiar el texto tiene que cambiar. Cree una nueva base de datos, importe los datos y luego cambie el nombre de la base de datos anterior y la nueva al nombre anterior.
La siguiente consulta generará ALTER consultas que cambian la intercalación de todas las columnas apropiadas en todas las tablas a un tipo determinado (utf8_general_ci en mi ejemplo a continuación).
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');
Puede agregar sencilla el código de archivo de 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!";
estoy contribuyendo aquí, ya que el OP preguntó:
Cómo cambiar la intercalación de base de datos, tabla, columna ?
La respuesta seleccionada simplemente lo indica en el nivel de la tabla.
Cambiándola amplia base de datos:
ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Cambiarla por mesa:
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
La buena práctica es cambiarlo a nivel de mesa, ya que va a cambiar por columnas, así . Cambiar para una columna específica es para cualquier caso específico.
Cambio de intercalación de una columna específica:
ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Éste realmente responde la pregunta directamente. Necesitaba esto, ya que mis cambios a nivel de tabla NO actualizaban las columnas. Lo investigaré más tarde; pero esta es la información que me ayudó a superar los tiempos difíciles. Gracias. – Parapluie
La mejor respuesta para esto. – jubi4dition
Me sorprendió que aprender, y así que tuve que volver aquí e informe, que el excelente y bien cuidado Interconexión/usted seguro de búsqueda Y CAMBIAR EN LA BASE DE DATOS script tiene algunas opciones para convertir tablas a utf8/unicode, e incluso para convertir a innodb. Es un script comúnmente utilizado para migrar un sitio web impulsado por una base de datos (Wordpress, Drupal, Joomla, etc.) de un dominio a otro.
si desea actualizar el conjunto de caracteres por defecto en un esquema:
ALTER SCHEMA MYSCHEMA DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;
que utilizó la siguiente secuencia de comandos shell. Toma el nombre de la base de datos como un parámetro y convierte todas las tablas en otro juego de caracteres y clasificación (dados por otros parámetros o valores predeterminados definidos en el script).
#!/bin/bash
# mycollate.sh <database> [<charset> <collation>]
# 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
)
Simplemente ejecute este SQL. Cambie su COLLATION a lo que necesita y databaseName.
SELECT CONCAT("ALTER TABLE ", TABLE_SCHEMA, '.', TABLE_NAME," COLLATE utf8_general_ci;") AS ExecuteTheString
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="databaseName"
AND TABLE_TYPE="BASE TABLE";
- 1. ¿Cómo cambiar la intercalación predeterminada de una base de datos?
- 2. ¿Cómo cambiar la intercalación predeterminada de una tabla?
- 3. ¿Cómo establecer la intercalación de una columna con SQL?
- 4. ¿Cambiar DBML, cómo cambiar la base de datos SQL?
- 5. ¿Cómo cambiar la posición de la columna de la tabla MySql sin perder los datos de la columna?
- 6. Descubre la intercalación de una columna MySQL
- 7. ¿Cómo puedo obtener la intercalación de una tabla específica en una base de datos?
- 8. ¿Cómo cambiar la intercalación de la base de datos sqlite3 para ordenar las mayúsculas y minúsculas de forma insensible?
- 9. mysql comprobar la intercalación de una tabla
- 10. Cómo cambiar la intercalación a utf8_bin de una vez
- 11. neo4j: ¿Cómo cambiar la base de datos?
- 12. base de datos convención: la columna DATETIME
- 13. cómo cambiar la compilación de la base de datos maestra en el servidor sql?
- 14. Cambiar la precisión de todas las columnas decimales en cada tabla en la base de datos
- 15. fórmula para la columna calculada sobre la base de la columna distinta de la tabla
- 16. Cómo cambiar la codificación de la base de datos phpMyAdmin
- 17. Columna congelada o columna fija en la tabla de datos
- 18. cambiar la intercalación predeterminada en phpmyadmin
- 19. Cómo cambiar el tipo de datos de una columna de datos en una tabla de datos?
- 20. ¿Cómo eliminar la columna tabla de datos en C#
- 21. Cómo copiar datos de una base de datos/tabla a otra base de datos/tabla
- 22. versión preliminar de la tabla de la base de datos
- 23. ¿Cómo cambio el nombre de una columna en una tabla de base de datos usando SQL?
- 24. ¿Cómo elimino la columna de la tabla sqlite en android?
- 25. ¿Cómo cambiar el propietario de la base de datos PostgreSql?
- 26. encriptar columna en la tabla
- 27. de nombres de columna en la tabla de base de datos booleano
- 28. ¿Actualizar la tabla de la base de datos de una tabla de base de datos de SQL Server a otra?
- 29. mejor intercalación predeterminada de una base de datos multilingüe
- 30. ¿Qué pasará con los datos existentes si cambio la intercalación de una columna en MySQL?
ver esto por la respuesta: http://stackoverflow.com/questions/5906585/how-to-change-the-default-collation-of-a-database/9531221#9531221 –