MySQL 後からDATA型 変換して不正データが修正されるか?

貰ったデータが全角、半角、記号など含めれている場合、当然だが、スクリプト上で計算できない。特にphp+MySQLだと変数を宣言しないで使うので、とても困ったり。
php側でmb_convertすればいいが、最初にデータベース上で一度すっきり直したいもの。
…、でデータ型を直せばいけると気がついて実験してみる。

あ、SELECTするときにCAST関数とか抜き出す時ではなくて
元データを型を変更して正式なデータにできるかっ?ということで。

これ夢かもしれないが、ある現場でたまたまうまく行ったケースがある。
これが使えるなら、わざわざエディタやエクセルやら、もしくは
自分でわざわざコンバート用のスクリプト組む必要ないものね。

データベースにデータ型に合わない
不正データがあった場合、
どの辺まで自動で直してくれるか実験

まずは日付から実験

まずは日付データをテストしてみる。

id test_date
1 2016/2/10 年が全角でそれ以外が半角・スラッシュ区切り
2 2016/2/10 全部半角でスラッシュ区切り
3 20160210 全角

さて、これを入れて、データ型を直してみる。

INSERT INTO `date_test` (`id`, `test_data`)
VALUES
('1', '2016/2/10'),
('2', '2016/2/10'),
('3', '20160210');

主キーはidに、
ここにtest_dataの構造をDATE型へ

ALTER TABLE `date_test` CHANGE `test_data` `test_data` DATE NOT NULL;


データ型変更 日付
だめだな。ダメだよね。当然だよね。
じゃ、全角だけならいけるか?

INSERT INTO `date_test` (`id`, `test_data`) VALUES 
('1', '2016/11/10'),
 ('2', '2016/05/20'), 
('3', '2016/10/10');

で、
MySQLでデータ変換できるか

ALTER TABLE `date_test` CHANGE `test_data` `test_data` DATE NOT NULL;

やっぱりダメでした。
結論から、テーブルに入れる前にちゃんと直してとけってやつか。
ネット上ではこんな馬鹿なことやる人いるのか確認

見かけたのは一度、関数使ってSELECTして、
違うテーブルにインポートすればいいじゃね?という意見、

そうだね。
不正データは不正データで直さないとね。

ん・・・なんだかスッキリしないな。

 

 

最新情報をチェックしよう!
>最強のWordPressテーマ「THE THOR」

最強のWordPressテーマ「THE THOR」

システムの構築・保守運用「   」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG