実現したいこと
下記のように CREATE, INSERT したレコードがあります。
この name
カラムを、ランダムなひらがな10文字で UPDATE したいです。
SQL
1CREATE TABLE `test_users` ( 2 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 `name` VARCHAR(100) DEFAULT '' 4); 5 6INSERT INTO `test_users` (`name`) VALUES ('aaa');
発生している問題・エラーメッセージ
phpMyAdmin の SQL タブに、後述する該当のソースコードの UPDATE をコピペし実行したものの、下記のエラーとなってしまいました。
MySQL のメッセージ: ドキュメント #1366 - Incorrect string value: '\x800G0F0...' for column 'name' at row 11
該当のソースコード
こちらがエラーとなった UPDATE です。
SQL
1UPDATE `test_users` 2SET `name` = ( 3 SELECT GROUP_CONCAT(c SEPARATOR '') 4 FROM ( 5 SELECT CHAR(CONV(HEX(FLOOR(12353 + RAND() * 83)), 16, 10)) AS c 6 FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION 7 SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) tmp 8 ) chars 9);
試したこと
試したこと(1) カラムの確認
エラーを見ると '\x930u0O0...' の表示があるので文字コードのせいかと思いました。
そこで SHOW FULL COLUMNS FROM test_users;
で確認しましたが、name
カラムは utf8mb4_general_ci
でした。
試したこと(2) 半角英文字の UPDATE
そしてひらがなでなく下記のような半角英文字なら無事 UPDATE できました。
SQL
1UPDATE `test_users` 2SET `name` = ( 3 SELECT GROUP_CONCAT(CHAR(FLOOR(97 + RAND() * 26)) SEPARATOR '') 4 FROM ( 5 SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION 6 SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 7 ) tmp 8);
試したこと(3) ひらがなの INSERT
また、ひらがなでも下記 INSERT なら無事できました。
SQL
1INSERT INTO `test_users` (`name`) VALUES ('あああ');
試したこと(4) 文字コードを再確認
SHOW VARIABLES LIKE 'character_set%';
を実行すると、結果は下記でした。
character_set_client: utf8mb4
character_set_connection: utf8mb4
character_set_database: utf8mb4
character_set_server: utf8mb4
補足
バージョンは SELECT VERSION();
して 5.7.27-log
の表示でした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/12/26 09:14