数据库latin1_general_ci现在,我想将排序更改为utf8mb4_general_ci.
PhpMyAdmin中是否有任何设置可以更改数据库,表,列的排序规则?而不是一个一个地改变?
Qua*_*noi 240
您需要单独转换每个表:
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4
Run Code Online (Sandbox Code Playgroud)
(这也将转换列),或者导出数据库latin1并将其导入utf8mb4.
Nab*_*med 169
OP在这里做出贡献,OP问道:
如何更改数据库,表,列的排序规则?
所选答案仅在表级别上说明.
在数据库范围内更改:
ALTER DATABASE <database_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
每个表更改它:
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
好的做法是在表级更改它,因为它也会为列更改它.特定列的更改适用于任何特定情况.
更改特定列的排序规则:
ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
hka*_*era 65
你可以运行一个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!";
?>
Run Code Online (Sandbox Code Playgroud)
jee*_*eva 38
要单独更改表的排序规则,您可以使用,
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8
Run Code Online (Sandbox Code Playgroud)
要为整个数据库设置默认排序规则,
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
Run Code Online (Sandbox Code Playgroud)
要不然,
转到PhpMyAdmin->操作 - >整理.
在那里,您可以找到包含所有现有排序规则的选择框.所以在这里你可以改变你的整理.因此,在创建新列时,数据库表将跟随此排序规则.创建新列时无需选择排序规则.
Sel*_*Sel 18
生成查询来更新每个表和每个表的列。我之前曾在我的一些项目中使用过它,并且能够解决我的大部分排序问题。(特别是在 JOINS 上)
要使用,只需将结果导出到分隔文本(可能是新行“\n”)
每桌
SELECT CONCAT('ALTER TABLE `', TABLE_NAME,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
AS 'USE `DATABASE_NAME`;'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DATABASE_NAME'
AND TABLE_TYPE LIKE 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)
每列
SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` MODIFY COLUMN `', COLUMN_NAME,'` ',
DATA_TYPE, IF(CHARACTER_MAXIMUM_LENGTH IS NULL
OR DATA_TYPE LIKE 'longtext', '', CONCAT('(', CHARACTER_MAXIMUM_LENGTH,
')')
), ' COLLATE utf8mb4_unicode_ci ', IF(INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE = 'YES', 'DEFAULT NULL;', 'NOT NULL;')) AS 'USE `DATABASE_NAME`;'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'DATABASE_NAME'
AND (SELECT INFORMATION_SCHEMA.TABLES.TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA =
INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA
AND INFORMATION_SCHEMA.TABLES.TABLE_NAME =
INFORMATION_SCHEMA.COLUMNS.TABLE_NAME
LIMIT 1) LIKE 'BASE TABLE'
AND DATA_TYPE IN ( 'char', 'varchar' ) /* include other types if necessary */
Run Code Online (Sandbox Code Playgroud)
Par*_*oni 12
以下查询将生成ALTER查询,这些查询将所有表中所有适当列的排序规则更改为某种类型(在下面的示例中为utf8_general_ci).
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');
Run Code Online (Sandbox Code Playgroud)
Yev*_*yev 10
如果你运行phpMyAdmin >> select database >> select table >>转到"操作"选项卡>>在"表格选项"部分>>你可以从下拉列表中选择整理>>,然后按下{Go}在屏幕顶部,您将看到一条消息:
您的SQL查询已成功执行
和一个脚本
ALTER TABLE `tableName` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
但它不会改变现有列的排序规则.为此,您可以使用此脚本(此脚本也来自phpMyAdmin)
ALTER TABLE `tableName` CHANGE `Name` `Name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
Run Code Online (Sandbox Code Playgroud)
您可以在以下几个级别设置默认排序规则:
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
1)客户端2)服务器默认3)数据库默认4)表默认5)列
只需运行此 SQL 即可一次转换所有数据库表。将您的 COLLATION 和 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";
Run Code Online (Sandbox Code Playgroud)
小智 8
通过 SQL 请求生成 SQL 脚本的更好变体。它不会破坏默认值/空值。
SELECT concat
(
'ALTER TABLE ',
t1.TABLE_SCHEMA,
'.',
t1.table_name,
' MODIFY ',
t1.column_name,
' ',
t1.column_type,
' CHARACTER SET utf8 COLLATE utf8_general_ci',
if(t1.is_nullable='YES', ' NULL', ' NOT NULL'),
if(t1.column_default is not null, concat(' DEFAULT \'', t1.column_default, '\''), ''),
';'
)
from
information_schema.columns t1
where
t1.TABLE_SCHEMA like 'your_table_here' AND
t1.COLLATION_NAME IS NOT NULL AND
t1.COLLATION_NAME NOT IN ('utf8_general_ci');
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过 PHP 脚本更改所有表的 CHARSET 和 COLLATION,如下所示。我喜欢 hkasera 的答案,但问题是查询在每个表上运行两次。除了使用 MySqli 而不是 mysql 以及防止重复查询之外,此代码几乎相同。如果我可以投票的话,我会投票赞成 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();
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
230786 次 |
| 最近记录: |