■結局どう設藹??する?
作成時:CREATE DATABASE aaa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
アプリ・??SET NAMES utf8mb4; あるい縺? mysql_set_charset('utf8mb4');
↑
DB作成時とアプリ使用時縺?utf8かutf8mb4で最菴?限統臀??する
utf8mb4とは文字コードの臀??種で、UTF8縺?4バイト文字を扱う事が出来るも縺?
絵文字や中国漢字、日本鐔??でも特觸??漢藹??など縺?4バイトが含まれている
MySQLで縺?5.5からこ縺?utf8mb4に対応している
utfmb3縺?3バイト、MySQLは・??バイトは非推螂?
照合順蠎? 縺? utf8_general_ci >新バージョンで藹??繧?っているので鐔??確鐔??
_ci 縺?case insensitive、_cs 縺? case sensitive、_bin はバイナ繝?
_ci がパフォーマンスがいい、
SET NAMES より mysql_set_charsetがverによってはいい、またPDOが推奨されているが
https://techracho.bpsinc.jp/baba/2010_02_17/1133
https://www.php.net/manual/ja/function.mysql-set-charset.php
絵文字で臀??手縺?いかないと鐔??が途切れる等があるらしい、utf8が良い?
作成時:CREATE DATABASE aaa DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
アプリ・??SET NAMES utf8; あるい縺? mysql_set_charset('utf8');
-----------------------------------------
■DBのバックアップ(MySQLのダンプ)
バージョンでコマンドが違う場合がある、古いやつの場合↓
DB設藹??の文字コード、DBの運用文字コード、サーバOSの文字コード、SQLクライアントの文字コードの間で自動変觸??が觸??かり面倒
http://kgbu.hateblo.jp/entry/20081226/1230259302
バイナリでダンプし、バイナリでインポートすると問題はない
しかしバイナリのバイトシーケンスが付荳?されるので觸??持ち悪い
Blobのような特觸??なカラムがな縺?文字コードが統臀??されていればそれでやりたい(utf8)
https://ngyuki.hatenablog.com/entry/2018/06/21/220624
cp932: MS win/IBM/NEC98縺?SJIS、各社独自に拡張している、ほ縺?Win逕?
mysqldump -Q --host=192.168.1.2 --user=oreore --password=**** --default-character-set=binary name_db >$DBDUMP_FILE
-Q縺?quickオプション、通常はダンプ時に臀??気にテーブルデータをメモリへバッファしますがq指定縺?1行ごとに処理し大きなテーブルに有逕?
オプションは繝?イフ繝?2つはフル表記縺?=で値を付荳?、繝?イフン臀??つで短縮形でスペースを付けた上で値を付荳?
--host=host_name -h host_name
???mysqldump-4.0が通らない、mysqldumpバイナ繝?/utf8オプションも使えない
Putty(SSH)等で入り sh db_backup.sh で藹??行しエラーを見る、無藹??觸??だと出せるが文字コードが混合している
ps -aux あるい縺? ps aux でプロセスを見て、駄目なら殺す kill [pid]
phpmyadminで手動でエクスポート(無藹??觸??)で全テーブルを出し譁?DBにのせかえるしか
→それまでは念のため通蟶?Backupに加えて手動で時々保存すれ
→MySQLadmin>エクスポート>テーブル選択(同じ文字コードのもの・??>実行
ps -aux
kill pid
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
KEEPDAY=25
TODAY=`date +'%y%m%d'`
DBDUMP_FILE1=mysql.$TODAY
DBDUMP_FILE2=mysql_utf8.$TODAY
RMFILE1=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
RMFILE2=mysql_utf8.`date -v -"$KEEPDAY"d +%y%m%d`.gz
HOME_DIR=/hamehame/
BACKUP_DIR=$HOME_DIR/db_backup
cd $BACKUP_DIR
mysqldump -Q --host=192.168.1.2 \
--user=oreore --password=**** --default-character-set=binary name_db >\
$DBDUMP_FILE1
gzip $DBDUMP_FILE1 >/dev/null 2>&1
if [ $? != 0 -o ! -e $DBDUMP_FILE1 ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE1
exit 0
fi
Bシェルの鐔??事も
https://www.bangboo.com/cms/blog/page_97.html
-----------------------------------------
■2010-03-09投遞?
Like句ではバイナリか正鐔??表現の觸??險?
MySQL縺?LIKE文による抽出で期待通りの觸??索軆??果を出して縺?れなかった。
「絵コンテ」でヒットするのに「コンテ」ではヒットしなかった。
(藹??因)
MySQL4.0以臀??では日本鐔??は単なるバイナリ列と同程度の扱いだった。MySQL4.1以臀??では正蠑?に藹??言語に対応したようである。EUC-JPでも問題が出に縺?いみたいだ。
1)LIKEで觸??索したいフィールドに「BINARY」を付加する
SELECT a FROM b LIKE BINARY 'ABC';
2)CREATE TABLE 時縺? varchar(255) BINARY と指定してお縺?
(簡単な回避方觸??)
3)バイナリが嫌ならLIKEの代繧?り縺?REGEXPを使う。これがオスス繝?
SELECT a FROM b WHERE target LIKE '%~%'
ではな縺?て、
SELECT a FROM b WHERE target REGEXP '~'
他には文字コードを譏?記しておいた方がよいかも
CREATE TABLE `tablename` (
`id` int(11) NOT NULL auto_increment,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-----------------------------------------
■2007-05-24投遞?
HTML出力、PHP、MySQL、全驛?UTF-8
その時、??と文字化けが起こったぁぁ
//mySQLの文字コード
照合順蠎? : utf8_general_ci
//mysqlクライアント。コマンドラインからチェッ繧?
mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
//phpソースコード・文字コード設藹??
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
//phpソースコード繝?PHP内部文字コードとクエリ文字コード設藹??
<?php //charactor code for php internal
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");
// database connection
if (!mysql_connect("localhost", "id", "pswd"))
{
die("Couldn't connect to MySQL");
}
if (!mysql_select_db("dbname"))
{
die("Couldn't connect to the database");
}
//charactor code for query
$sql = mysql_query("SET NAMES utf8");
$result = mysql_query($sql);
?>
Set Names文のクエリ発鐔??がミソ。PHPで発鐔??してみる