3

utf-8 エンコーディングで mysql DB に書き込む際に問題が発生しました。私のアプリケーションは少し複雑なので、できるだけ具体的にしようと思います。(私のアプリケーションでは、ľščťžýáí などのスロバキア語の特殊な文字 (utf-8 にあります) が必要です。

私はデビアンを実行しています。私のロケールは正しく設定されていると思いますが、念のため:

root@radiator:/var/scripts# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=sk_SK.UTF-8
LANGUAGE=sk_SK.UTF-8:cs_CZ.UTF-8
LC_CTYPE="sk_SK.UTF-8"
LC_NUMERIC="sk_SK.UTF-8"
LC_TIME="sk_SK.UTF-8"
LC_COLLATE="sk_SK.UTF-8"
LC_MONETARY="sk_SK.UTF-8"
LC_MESSAGES="sk_SK.UTF-8"
LC_PAPER="sk_SK.UTF-8"
LC_NAME="sk_SK.UTF-8"
LC_ADDRESS="sk_SK.UTF-8"
LC_TELEPHONE="sk_SK.UTF-8"
LC_MEASUREMENT="sk_SK.UTF-8"
LC_IDENTIFICATION="sk_SK.UTF-8"
LC_ALL=

テキストを (スロバキア語で DB に) 書き込む必要がある bash スクリプトがあります (最初のハッシュ文字は、debian が BOM を操作する方法を知らないため、まだ処理方法がわからないためです)。

#
#!/bin/bash
table=$1
cycle=$2
sstart=$3
eend=$4
dbtext=$(cat /var/www/vids/$5/vars/$5.recogn.p.tmp2)

qry="INSERT INTO  \`video\`.\`$table\` (\`DB_ID\` , \`LNX_ID\` , \`STIME\` , \`ETIME\` , \`TEXT\` ) VALUES ( NULL , '$cycle', '$sstart', '$eend', '$dbtext');"

mysql --host=localhost --database 'video' --user=uzivatel --password=heslo << eof
$qry
eof

これは、前述の tmp2 ファイルの内容です (このファイルのエンコードは utf-8 です)。

Tá žena držal poznali poznal jeho rodičov poznali podsvetie hodváb ulsteru mám ostatných tak veľmi dobre ako boli pre nato že sa bude vydávať ale skóre nevyšlo to potom zas nasťahovala.

そしてphpmyadminでは次のようになります:

Tá žena držal poznali poznal jeho rodiÄov poznali podsvetie hodváb ulsteru mám ostatných tak veľmi dobre ako boli pre nato že sa bude vydávaÅ¥ ale skóre nevyÅ¡lo to potom zas nasÅ¥ahovala.

(このフィールドのエンコーディングは utf8_slovak_ci です) (Google Chrome エンコーディングは utf8 です) .

これをグーグルで検索するのに丸一日かかりましたが、何が問題なのかわかりません。手伝っていただけませんか ?私はあなたが最高であることを知っています.. :)

4

1 に答える 1