[SQL] 스크립트는 MYSQL에서 UTF-8 단 정렬 모든 테이블과 필드를 변경합니다
SQL스크립트는 MYSQL에서 UTF-8 단 정렬 모든 테이블과 필드를 변경합니다
내가 그 데이터베이스의 모든 테이블과 필드의 기본 데이터 정렬을 변경됩니다 실행할 수있는 SQL 또는 PHP 스크립트가 있습니까?
나는 하나를 자신을 쓸 수 있지만 문제는이 같은 사이트가 쉽게 사용할 수 뭔가를해야한다고 생각합니다. 나는 사람의 게시물 일 이전에 하나의 자신을 가지고 올 수 있다면, 내가 직접 게시 할 예정입니다.
해결법
-
==============================
1.조심해! 실제로 다른 인코딩으로 저장 UTF이있는 경우, 당신은 당신의 손에 진짜 엉망이있을 수 있습니다. 첫 번째 백업합니다. 그런 다음 표준 방법 중 일부를 시도 :
조심해! 실제로 다른 인코딩으로 저장 UTF이있는 경우, 당신은 당신의 손에 진짜 엉망이있을 수 있습니다. 첫 번째 백업합니다. 그런 다음 표준 방법 중 일부를 시도 :
예를 들면 http://www.cesspit.net/drupal/node/898 http://www.hackszine.com/blog/archive/2007/05/mysql_database_migration_latin.html
나는 다시 VARCHAR / 텍스트, 바이너리 모든 텍스트 필드를 변환 할 수 밖에 없었습니다. 이 내 엉덩이를 저장하고있다.
내가 데이터를했다 라틴어로 저장 UTF8이다. 제가 한:
인덱스를 삭제합니다. 바이너리에 필드를 변환합니다. UTF8 - 일반 CI로 변환
당신의 램프에 경우, DB와 상호 작용하기 전에 설정 이름은 명령을 추가하는 것을 잊지하고, 당신이 세트 문자 인코딩 헤더를하지 않습니다.
-
==============================
2.하나의 명령 (보다는 PHP 148)에서 수행 할 수 있습니다 :
하나의 명령 (보다는 PHP 148)에서 수행 할 수 있습니다 :
mysql --database=dbname -B -N -e "SHOW TABLES" \ | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \ | mysql --database=dbname &
당신은 명령 줄을 사랑하고있어 ... (당신은 MySQL을위한 --user 및 --password 옵션을 채택해야 할 수도 있습니다).
편집 : 외래 키 문제, 추가 SET의 FOREIGN_KEY_CHECKS = 0을 피하기 위해; 및 SET의 FOREIGN_KEY_CHECKS = 1;
-
==============================
3.나는 phpMyAdmin을 runin 두 단계로이 일을 쉽게 생각합니다. 1 단계:
나는 phpMyAdmin을 runin 두 단계로이 일을 쉽게 생각합니다. 1 단계:
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as stmt FROM `information_schema`.`TABLES` t WHERE 1 AND t.`TABLE_SCHEMA` = 'database_name' ORDER BY 1
2 단계: 이 쿼리가 출력 쿼리의 목록, 각 테이블에 대해 하나. 당신은 쿼리의 목록을 복사하고, 변경이 될 수 있도록 phpMyAdmin과의 SQL 탭 명령 줄에 나에 붙여 넣기합니다.
-
==============================
4.OK,이 스레드에서 무슨 말을했는지 고려까지이 썼다. 도움을 주셔서 감사합니다, 나는이 스크립트는 다른 사람을 도움이되기를 바랍니다. 그래서 그것을 실행하기 전에 백업을 기쁘게도, 그 사용에 대한 보증을하지 않습니다. 그것은 모든 데이터베이스와 함께 작동한다; 그리고 그것은 내 자신에 좋은 일했다.
OK,이 스레드에서 무슨 말을했는지 고려까지이 썼다. 도움을 주셔서 감사합니다, 나는이 스크립트는 다른 사람을 도움이되기를 바랍니다. 그래서 그것을 실행하기 전에 백업을 기쁘게도, 그 사용에 대한 보증을하지 않습니다. 그것은 모든 데이터베이스와 함께 작동한다; 그리고 그것은 내 자신에 좋은 일했다.
편집 : 캐릭터 / 부씩로 변환하는 추가는 상단에 바르. EDIT2가 : 데이터베이스의와 테이블을 '변경 디폴트 캐릭터 세트 / 부씩
<?php function MysqlError() { if (mysql_errno()) { echo "<b>Mysql Error: " . mysql_error() . "</b>\n"; } } $username = "root"; $password = ""; $db = "database"; $host = "localhost"; $target_charset = "utf8"; $target_collate = "utf8_general_ci"; echo "<pre>"; $conn = mysql_connect($host, $username, $password); mysql_select_db($db, $conn); $tabs = array(); $res = mysql_query("SHOW TABLES"); MysqlError(); while (($row = mysql_fetch_row($res)) != null) { $tabs[] = $row[0]; } // now, fix tables foreach ($tabs as $tab) { $res = mysql_query("show index from {$tab}"); MysqlError(); $indicies = array(); while (($row = mysql_fetch_array($res)) != null) { if ($row[2] != "PRIMARY") { $indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => $row[4]); mysql_query("ALTER TABLE {$tab} DROP INDEX {$row[2]}"); MysqlError(); echo "Dropped index {$row[2]}. Unique: {$row[1]}\n"; } } $res = mysql_query("DESCRIBE {$tab}"); MysqlError(); while (($row = mysql_fetch_array($res)) != null) { $name = $row[0]; $type = $row[1]; $set = false; if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat)) { $size = $mat[1]; mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARBINARY({$size})"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR({$size}) CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } else if (!strcasecmp($type, "CHAR")) { mysql_query("ALTER TABLE {$tab} MODIFY {$name} BINARY(1)"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR(1) CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } else if (!strcasecmp($type, "TINYTEXT")) { mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYBLOB"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYTEXT CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } else if (!strcasecmp($type, "MEDIUMTEXT")) { mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMBLOB"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMTEXT CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } else if (!strcasecmp($type, "LONGTEXT")) { mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGBLOB"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGTEXT CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } else if (!strcasecmp($type, "TEXT")) { mysql_query("ALTER TABLE {$tab} MODIFY {$name} BLOB"); MysqlError(); mysql_query("ALTER TABLE {$tab} MODIFY {$name} TEXT CHARACTER SET {$target_charset}"); MysqlError(); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } if ($set) mysql_query("ALTER TABLE {$tab} MODIFY {$name} COLLATE {$target_collate}"); } // re-build indicies.. foreach ($indicies as $index) { if ($index["unique"]) { mysql_query("CREATE UNIQUE INDEX {$index["name"]} ON {$tab} ({$index["col"]})"); MysqlError(); } else { mysql_query("CREATE INDEX {$index["name"]} ON {$tab} ({$index["col"]})"); MysqlError(); } echo "Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n"; } // set default collate mysql_query("ALTER TABLE {$tab} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}"); } // set database charset mysql_query("ALTER DATABASE {$db} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}"); mysql_close($conn); echo "</pre>"; ?>
-
==============================
5.이 PHP 조각은 DB의 모든 테이블에 데이터 정렬을 변경합니다. (그것은이 사이트에서 가져온 것.)
이 PHP 조각은 DB의 모든 테이블에 데이터 정렬을 변경합니다. (그것은이 사이트에서 가져온 것.)
<?php // your connection mysql_connect("localhost","root","***"); mysql_select_db("db1"); // convert code $res = mysql_query("SHOW TABLES"); while ($row = mysql_fetch_array($res)) { foreach ($row as $key => $table) { mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci"); echo $key . " => " . $table . " CONVERTED<br />"; } } ?>
-
==============================
6.AWK없이 다윗의 @에 따라 명령 줄을 사용하여 또 다른 방법,
AWK없이 다윗의 @에 따라 명령 줄을 사용하여 또 다른 방법,
for t in $(mysql --user=root --password=admin --database=DBNAME -e "show tables";);do echo "Altering" $t;mysql --user=root --password=admin --database=DBNAME -e "ALTER TABLE $t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;";done
prettified
for t in $(mysql --user=root --password=admin --database=DBNAME -e "show tables";); do echo "Altering" $t; mysql --user=root --password=admin --database=DBNAME -e "ALTER TABLE $t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;"; done
-
==============================
7.위의 스크립트의 더 완전한 버전은 여기에서 찾을 수 있습니다 :
위의 스크립트의 더 완전한 버전은 여기에서 찾을 수 있습니다 :
http://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=1937
여기 기여에 대한 의견을 남겨주세요 : HTTP : //www.zen-cart.com/forum/showthread.php P = 1034214
-
==============================
8.문자 집합 및 정렬은 같은 것이 아니다. 데이터 정렬 문자열을 정렬하는 방법에 대한 규칙의 집합입니다. 캐릭터 세트는 문자를 표현하는 방법에 대한 규칙의 집합입니다. 데이터 정렬은 문자 집합에 따라 달라집니다.
문자 집합 및 정렬은 같은 것이 아니다. 데이터 정렬 문자열을 정렬하는 방법에 대한 규칙의 집합입니다. 캐릭터 세트는 문자를 표현하는 방법에 대한 규칙의 집합입니다. 데이터 정렬은 문자 집합에 따라 달라집니다.
-
==============================
9.(SHOW 테이블과) 대화를 위해 선택한 모든 테이블,하지만 테이블을 변환하기 전에 테이블 정렬을 확인하는보다 편리하고 휴대 위의 방법으로 스크립트에서. 이 쿼리를 수행합니다
(SHOW 테이블과) 대화를 위해 선택한 모든 테이블,하지만 테이블을 변환하기 전에 테이블 정렬을 확인하는보다 편리하고 휴대 위의 방법으로 스크립트에서. 이 쿼리를 수행합니다
SELECT table_name , table_collation FROM information_schema.tables
-
==============================
10.내 사용자 지정 쉘 collatedb를 사용하여, 그것을 작동합니다 :
내 사용자 지정 쉘 collatedb를 사용하여, 그것을 작동합니다 :
collatedb <username> <password> <database> <collation>
예 :
collatedb root 0000 myDatabase utf8_bin
-
==============================
11.덕분에 저를 아래의 솔루션에서 시작되었다 코드에 대한 @nlaq.
덕분에 저를 아래의 솔루션에서 시작되었다 코드에 대한 @nlaq.
나는 워드 프레스 자동으로 한 부씩 인쇄를 설정하지 않는 것을 실현하지 않고 플러그인 워드 프레스를 발표했다. 플러그인을 사용하여 많은 사람들이 latin1_swedish_ci로 결국 그래서 utf8_general_ci를 했어야합니다.
다음은 latin1_swedish_ci 한 부씩 인쇄를 감지하고 utf8_general_ci로 변경하는 플러그인에 추가 된 코드 I입니다.
자신의 플러그인에서 사용하기 전에이 코드를 테스트!
// list the names of your wordpress plugin database tables (without db prefix) $tables_to_check = array( 'social_message', 'social_facebook', 'social_facebook_message', 'social_facebook_page', 'social_google', 'social_google_mesage', 'social_twitter', 'social_twitter_message', ); // choose the collate to search for and replace: $convert_fields_collate_from = 'latin1_swedish_ci'; $convert_fields_collate_to = 'utf8_general_ci'; $convert_tables_character_set_to = 'utf8'; $show_debug_messages = false; global $wpdb; $wpdb->show_errors(); foreach($tables_to_check as $table) { $table = $wpdb->prefix . $table; $indicies = $wpdb->get_results( "SHOW INDEX FROM `$table`", ARRAY_A ); $results = $wpdb->get_results( "SHOW FULL COLUMNS FROM `$table`" , ARRAY_A ); foreach($results as $result){ if($show_debug_messages)echo "Checking field ".$result['Field'] ." with collat: ".$result['Collation']."\n"; if(isset($result['Field']) && $result['Field'] && isset($result['Collation']) && $result['Collation'] == $convert_fields_collate_from){ if($show_debug_messages)echo "Table: $table - Converting field " .$result['Field'] ." - " .$result['Type']." - from $convert_fields_collate_from to $convert_fields_collate_to \n"; // found a field to convert. check if there's an index on this field. // we have to remove index before converting field to binary. $is_there_an_index = false; foreach($indicies as $index){ if ( isset($index['Column_name']) && $index['Column_name'] == $result['Field']){ // there's an index on this column! store it for adding later on. $is_there_an_index = $index; $wpdb->query( $wpdb->prepare( "ALTER TABLE `%s` DROP INDEX %s", $table, $index['Key_name']) ); if($show_debug_messages)echo "Dropped index ".$index['Key_name']." before converting field.. \n"; break; } } $set = false; if ( preg_match( "/^varchar\((\d+)\)$/i", $result['Type'], $mat ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARBINARY({$mat[1]})" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARCHAR({$mat[1]}) CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; } else if ( !strcasecmp( $result['Type'], "CHAR" ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` BINARY(1)" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` VARCHAR(1) CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; } else if ( !strcasecmp( $result['Type'], "TINYTEXT" ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TINYBLOB" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TINYTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; } else if ( !strcasecmp( $result['Type'], "MEDIUMTEXT" ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` MEDIUMBLOB" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` MEDIUMTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; } else if ( !strcasecmp( $result['Type'], "LONGTEXT" ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` LONGBLOB" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` LONGTEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; } else if ( !strcasecmp( $result['Type'], "TEXT" ) ) { $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` BLOB" ); $wpdb->query( "ALTER TABLE `{$table}` MODIFY `{$result['Field']}` TEXT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); $set = true; }else{ if($show_debug_messages)echo "Failed to change field - unsupported type: ".$result['Type']."\n"; } if($set){ if($show_debug_messages)echo "Altered field success! \n"; $wpdb->query( "ALTER TABLE `$table` MODIFY {$result['Field']} COLLATE $convert_fields_collate_to" ); } if($is_there_an_index !== false){ // add the index back. if ( !$is_there_an_index["Non_unique"] ) { $wpdb->query( "CREATE UNIQUE INDEX `{$is_there_an_index['Key_name']}` ON `{$table}` ({$is_there_an_index['Column_name']})", $is_there_an_index['Key_name'], $table, $is_there_an_index['Column_name'] ); } else { $wpdb->query( "CREATE UNIQUE INDEX `{$is_there_an_index['Key_name']}` ON `{$table}` ({$is_there_an_index['Column_name']})", $is_there_an_index['Key_name'], $table, $is_there_an_index['Column_name'] ); } } } } // set default collate $wpdb->query( "ALTER TABLE `{$table}` DEFAULT CHARACTER SET {$convert_tables_character_set_to} COLLATE {$convert_fields_collate_to}" ); if($show_debug_messages)echo "Finished with table $table \n"; } $wpdb->hide_errors();
-
==============================
12.귀하의 IDE의 다중 선택 기능을 사용하여 간단한 (바보 :) 솔루션?
귀하의 IDE의 다중 선택 기능을 사용하여 간단한 (바보 :) 솔루션?
-
==============================
13.다음은 편집 INFORMATION_SCHEMA에 대한 명령 줄 액세스 또는 액세스 할 수없는 경우 단지 phpMyAdmin을 사용하여이 작업을 수행 할 수있는 쉬운 방법입니다.
다음은 편집 INFORMATION_SCHEMA에 대한 명령 줄 액세스 또는 액세스 할 수없는 경우 단지 phpMyAdmin을 사용하여이 작업을 수행 할 수있는 쉬운 방법입니다.
첫째, 여기에 다른 답변의 많은 조언을 듣고 - 당신은 정말 그렇게 백업을, 여기에 일을 망칠 수 있습니다. 이제 백업의 백업을합니다. 데이터가 당신에게 무엇을 변경하고 있는지 다르게 인코딩 된 경우 또한이 작업을 않을 수 있습니다.
당신은 당신이 시작하기 전에에서 변화를 필요로하는 기분을 상하게 스키마와 문자 인코딩의 정확한 이름을 찾을 필요가 있습니다.
,이 그것을 할 수있는 매우 쉬운 방법이지만, 다시,이 데이터의 인코딩을 변경하지 않습니다 특정 상황에서 그것만이 작업 때문에.
-
==============================
14.나는 가장 빠른 방법은 phpMyAdmin을 콘솔에 대한 몇 가지 jQuery를 함께 생각합니다.
나는 가장 빠른 방법은 phpMyAdmin을 콘솔에 대한 몇 가지 jQuery를 함께 생각합니다.
테이블의 구조와 개방형 크롬 / 파이어 폭스 개발자 콘솔 (키보드에서 일반적으로 F12)로 이동
phpMyAdmin을 4.0과 4.4에서 테스트,하지만 난 모든 4.x의 버전에 대한 작업을 생각한다
-
==============================
15.나는 PHP7와 함께 작동하도록 nlaq의 답변을 업데이트하고 제대로 멀티 컬럼 인덱스, 이진 부씩 데이터를 처리하기 위해 (예를 들어 latin1_bin) 등, 및 코드를 조금 정리. 이것은 내가 성공적으로 라틴에서 UTF8로 내 데이터베이스를 마이그레이션 것을 시도 / 발견하는 유일한 코드입니다.
나는 PHP7와 함께 작동하도록 nlaq의 답변을 업데이트하고 제대로 멀티 컬럼 인덱스, 이진 부씩 데이터를 처리하기 위해 (예를 들어 latin1_bin) 등, 및 코드를 조금 정리. 이것은 내가 성공적으로 라틴에서 UTF8로 내 데이터베이스를 마이그레이션 것을 시도 / 발견하는 유일한 코드입니다.
<?php /////////// BEGIN CONFIG //////////////////// $username = ""; $password = ""; $db = ""; $host = ""; $target_charset = "utf8"; $target_collation = "utf8_unicode_ci"; $target_bin_collation = "utf8_bin"; /////////// END CONFIG //////////////////// function MySQLSafeQuery($conn, $query) { $res = mysqli_query($conn, $query); if (mysqli_errno($conn)) { echo "<b>Mysql Error: " . mysqli_error($conn) . "</b>\n"; echo "<span>This query caused the above error: <i>" . $query . "</i></span>\n"; } return $res; } function binary_typename($type) { $mysql_type_to_binary_type_map = array( "VARCHAR" => "VARBINARY", "CHAR" => "BINARY(1)", "TINYTEXT" => "TINYBLOB", "MEDIUMTEXT" => "MEDIUMBLOB", "LONGTEXT" => "LONGBLOB", "TEXT" => "BLOB" ); $typename = ""; if (preg_match("/^varchar\((\d+)\)$/i", $type, $mat)) $typename = $mysql_type_to_binary_type_map["VARCHAR"] . "(" . (2*$mat[1]) . ")"; else if (!strcasecmp($type, "CHAR")) $typename = $mysql_type_to_binary_type_map["CHAR"] . "(1)"; else if (array_key_exists(strtoupper($type), $mysql_type_to_binary_type_map)) $typename = $mysql_type_to_binary_type_map[strtoupper($type)]; return $typename; } echo "<pre>"; // Connect to database $conn = mysqli_connect($host, $username, $password); mysqli_select_db($conn, $db); // Get list of tables $tabs = array(); $query = "SHOW TABLES"; $res = MySQLSafeQuery($conn, $query); while (($row = mysqli_fetch_row($res)) != null) $tabs[] = $row[0]; // Now fix tables foreach ($tabs as $tab) { $res = MySQLSafeQuery($conn, "SHOW INDEX FROM `{$tab}`"); $indicies = array(); while (($row = mysqli_fetch_array($res)) != null) { if ($row[2] != "PRIMARY") { $append = true; foreach ($indicies as $index) { if ($index["name"] == $row[2]) { $index["col"][] = $row[4]; $append = false; } } if($append) $indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => array($row[4])); } } foreach ($indicies as $index) { MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` DROP INDEX `{$index["name"]}`"); echo "Dropped index {$index["name"]}. Unique: {$index["unique"]}\n"; } $res = MySQLSafeQuery($conn, "SHOW FULL COLUMNS FROM `{$tab}`"); while (($row = mysqli_fetch_array($res)) != null) { $name = $row[0]; $type = $row[1]; $current_collation = $row[2]; $target_collation_bak = $target_collation; if(!strcasecmp($current_collation, "latin1_bin")) $target_collation = $target_bin_collation; $set = false; $binary_typename = binary_typename($type); if ($binary_typename != "") { MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` MODIFY `{$name}` {$binary_typename}"); MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` MODIFY `{$name}` {$type} CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'"); $set = true; echo "Altered field {$name} on {$tab} from type {$type}\n"; } $target_collation = $target_collation_bak; } // Rebuild indicies foreach ($indicies as $index) { // Handle multi-column indices $joined_col_str = ""; foreach ($index["col"] as $col) $joined_col_str = $joined_col_str . ", `" . $col . "`"; $joined_col_str = substr($joined_col_str, 2); $query = ""; if ($index["unique"]) $query = "CREATE UNIQUE INDEX `{$index["name"]}` ON `{$tab}` ({$joined_col_str})"; else $query = "CREATE INDEX `{$index["name"]}` ON `{$tab}` ({$joined_col_str})"; MySQLSafeQuery($conn, $query); echo "Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n"; } // Set default character set and collation for table MySQLSafeQuery($conn, "ALTER TABLE `{$tab}` DEFAULT CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'"); } // Set default character set and collation for database MySQLSafeQuery($conn, "ALTER DATABASE `{$db}` DEFAULT CHARACTER SET '{$target_charset}' COLLATE '{$target_collation}'"); mysqli_close($conn); echo "</pre>"; ?>
-
==============================
16.@davidwinterbottom 대답뿐만 아니라, Windows 사용자는 명령을 아래에 사용할 수 있습니다 :
@davidwinterbottom 대답뿐만 아니라, Windows 사용자는 명령을 아래에 사용할 수 있습니다 :
mysql.exe --database=[database] -u [user] -p[password] -B -N -e "SHOW TABLES" \ | awk.exe '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \ | mysql.exe -u [user] -p[password] --database=[database] &
[데이터베이스], [사용자]과 실제 값 [암호] 자리 바꾸기.
망할 놈의-bash는 사용자는이 bash는 스크립트를 다운로드 할 수 있으며, 쉽게 실행합니다.
from https://stackoverflow.com/questions/105572/a-script-to-change-all-tables-and-fields-to-the-utf-8-bin-collation-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 당신은 무엇 SQL 코딩 표준을 따라야합니까? [닫은] (0) | 2020.06.20 |
---|---|
[SQL] 설정 트랜잭션 격리 수준 READ UNCOMMITTED 대 (NOLOCK) (0) | 2020.06.20 |
[SQL] 저장 날짜 시간 (UTC) 대 기억하는 DateTimeOffset (0) | 2020.06.20 |
[SQL] 어떻게 SQL 명령문 작업 존재? (0) | 2020.06.20 |
[SQL] CTE 쿼리에서 SELECT * INTO 임시 테이블에 임시 테이블을 만드는 방법 (0) | 2020.06.20 |