社内にて、Windows2008R2・PHP・Apache・Mysqlにてダウンロードサイトを運用しています。
Mysqlのあるテーブル内にアップロードログを書き込むようにしています。
DatatypeはVARCHAR(100)です。
その項目に「~」の文字をInsertにて書き込もうとすると、
「Error:There was an error while applying the SQL script to the database」
となり、書き込むできません。
「~」文字を書き込む為には、Datatypeをどのようにすればいいでしょうか?
それとも、「~」の文字は書き込む事はできないのでしょうか。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
「~」は鬼門ですねー。Oracleでですけど、以前似たようなトラブルにあいました。
全角チルダ問題
確認して欲しい内容
MySQLでの文字化け対策
文字コードの問題だと思うので、確認してみてください。
投稿2015/12/13 05:43
総合スコア856
0
上の方が言われていたキャラクタセットの問題っぽい気がします。
DBのキャラクタセットはUTF8以外でしょうか。
また、クライアント側のキャラクタセットの問題も考えられそうです。
my.cnfとPHPからMySQLに接続する際のキャラクタセットを指定すれば問題ないと思いますが。
SJISやlatinだとはまるかもしれないですね。
投稿2015/12/13 15:00
編集2015/12/13 15:01総合スコア43
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
手入力で「~」を入力しても結果的に書き込みができませんでした。
とのことですが、私の環境では問題は発生しませんでした。
sql
1mysql> desc testlog; 2+-----------+--------------+------+-----+---------+-------+ 3| Field | Type | Null | Key | Default | Extra | 4+-----------+--------------+------+-----+---------+-------+ 5| uploadlog | varchar(100) | YES | | NULL | | 6+-----------+--------------+------+-----+---------+-------+ 71 row in set (0.00 sec) 8 9mysql> insert into testlog (uploadlog) values ("〜~"); 10Query OK, 1 row affected (0.01 sec) 11 12mysql> select * from testlog; 13+-----------+ 14| uploadlog | 15+-----------+ 16| 〜~ | 17+-----------+ 181 row in set (0.00 sec)
どのようなSQL文を手入力で投げて、どのようなエラーが戻ったのかを質問に追記する形でご提示ください。
追記
当方の環境を出力します。お使いの環境と何か違いがありますか。
sql
1mysql> insert into testlog (uploadlog) values ('20151002~20151201'); 2Query OK, 1 row affected (0.01 sec) 3 4mysql> select * from testlog; 5+---------------------+ 6| uploadlog | 7+---------------------+ 8| 〜~ | 9| 20151002~20151201 | 10+---------------------+ 112 rows in set (0.00 sec) 12 13mysql> show variables like "chara%"; 14+--------------------------+----------------------------+ 15| Variable_name | Value | 16+--------------------------+----------------------------+ 17| character_set_client | utf8 | 18| character_set_connection | utf8 | 19| character_set_database | utf8 | 20| character_set_filesystem | binary | 21| character_set_results | utf8 | 22| character_set_server | latin1 | 23| character_set_system | utf8 | 24| character_sets_dir | /usr/share/mysql/charsets/ | 25+--------------------------+----------------------------+ 268 rows in set (0.00 sec) 27 28mysql> show create table testlog \G; 29*************************** 1. row *************************** 30 Table: testlog 31Create Table: CREATE TABLE `testlog` ( 32 `uploadlog` varchar(100) DEFAULT NULL 33) ENGINE=InnoDB DEFAULT CHARSET=utf8 341 row in set (0.00 sec)
追記
sql
1mysql> select hex(ord('〜')); 2+-----------------+ 3| hex(ord('〜')) | 4+-----------------+ 5| E3809C | 6+-----------------+ 71 row in set (0.00 sec)
PHPでMySQLにUPDATE文を投げる前に、〜
をFULLWIDTH TILDE
からWAVE DASH
に変換、
つまり\xEF\xBD\x9E
を\xE3\x80\x9C
に変換をかけることはできますか。
FULLWIDTH TILDE
ではなくWAVE DASH
なら入るのではなかろうかと推測しております。
投稿2015/12/11 05:39
編集2015/12/11 06:31総合スコア1698
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
これはデータタイプ問題ではないかもしれません。(もう少しログを出させてみた方がいいと思います。)
まずはMySQLに手入力でInsertしてみてください。(多分、直接にInsert文で「~」はInsertされると思いますが。)もし手入力でも同じように出来なけれはテーブルを作成する際に問題があるかもしれません。(Syntaxなど)手入力でInsertされますとPHPから転送する際の書き込みなどで問題かもしれないので、そちらに関連するところのログを確認してみてください。その現象についてのログなどが出ましたら、また載せてください。
投稿2015/12/11 03:15
総合スコア19
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/11 05:23
2015/12/11 07:28
0
VARCHARで’~’が書き込めないという制約は無い筈ですので
下記のようなSQLでお試しになられてはどうでしょうか?
create table a_tmp (id bigint, c1 varchar(100));
insert into a_tmp values (1,'~');
もしこれがエラーになるとしたら記述とは別の所に問題があるという切り分けにはなるかと思います。
もし可能であればkumakumatanさんが実行したSQLを添付して第3者に検証を依頼すると良いと思います
また、お使いのMYSQLのバージョン PHPのバージョン JDBCやODBC等ドライバを使用している場合はそれらのバージョン を併記されるとバグ等に関係する情報を得られやすいと思います。
投稿2015/12/11 03:15
総合スコア13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/11 05:33
2015/12/11 05:41
2015/12/11 06:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/14 04:43
2015/12/14 06:26
2015/12/14 10:05
2015/12/16 04:28