/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

March 9, 2010

MySQL chara issue

■結局どう設定する?
作成時: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は3バイトは非推奨

照合順序 は 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で発行してみる

twitter
Hatena
Google Buzz
newsing
Yahoo!
Buzzurl
Technorati
del.icio.us
Choix
Iza!
Livedoor Clip
Facebook
Evernote
 

Posted by funa : 05:02 AM | Web | Comment (0) | Trackback (0)


PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4The beginning of CSSレイアウト
#5Column
#6Web font test
#7Ora Ora Ora Ora Ora
#8Wifi cam
#9みたらし団子
#10Arcade Controller
#11G Suite
#12PC SPEC 2012.8
#13Javascript
#14REMIX DTM DAW - Acid
#15RSS Radio
#16Optimost
#17通話SIM
#18Attachment
#19Summer time blues
#20Enigma
#21Git
#22Warning!! Page Expired.
#23Speaker
#24Darwinian Theory Of Evolution
#25AV首相
#26htaccess mod_rewite
#27/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#28竹書房
#29F☆ck CSS
#30Automobile Inspection
#31No ID
#32Win7 / Win10 Insco
#33Speaker
#34Arcade Controller
#35Agile
#36G Suite
#37Personal Information Privacy Act
#38Europe
#39Warning!! Page Expired.
#40GoogleMap Moblile
#41CSS Selectors
#42MySQL DB Database
#43Ant
#44☆od damnit
#45Teeth Teeth
#46Itinerary with a eurail pass
#47PHP Developer
#48Affiliate
#49/// BANGBOO BLOG /// From 2019-01-01 To 2019-01-31
#50/// BANGBOO BLOG /// From 2019-09-01 To 2019-09-30
#51/// BANGBOO BLOG /// On 2020-03-01
#52/// BANGBOO BLOG /// On 2020-04-01
#53Windows env tips
#54恐慌からの脱出方法
#55MARUTAI
#56A Rainbow Between Clouds‏
#57ER
#58PDF in cellphone with microSD
#59DJ
#60ICOCA
#61Departures
#62Update your home page
#63CSS Grid
#64恐慌からの脱出方法
#65ハチロクカフェ
#66/// BANGBOO BLOG /// On 2016-03-31
#67/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#68/// BANGBOO BLOG /// From 2019-07-01 To 2019-07-31
#69/// BANGBOO BLOG /// From 2019-10-01 To 2019-10-31
#70/// BANGBOO BLOG /// On 2020-01-21
#71Bike
#72Where Hiphop lives!!
#73The team that always wins
#74Tora Tora Tora
#75Blog Ping
#76無料ストレージ
#77jQuery - write less, do more.
#78Adobe Premire6.0 (Guru R.I.P.)
#79PC SPEC 2007.7
#80Google Sitemap
#81Information privacy & antispam law
#82Wifi security camera with solar panel & small battery
#83Hope get back to normal
#84Vice versa
#85ハイエースのメンテ
#86Camoufla
#87α7Ⅱ
#88Jack up Hiace
#89Fucking tire
#90Big D
#914 Pole Plug
#925-year-old shit
#93Emancipation Proclamation
#94Windows env tips
#95Meritocracy
#96Focus zone
#97Raspberry Pi
#98Mind Control
#99Interview
#100Branding Excellent
Category
Recent Entry
Trackback
Comment
Archive
<     December 2024     >
Sun Mon Tue Wed Thi Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Link