【メモ】MySQLのエクスポート・インポートでバージョンが違ってる時にありがちなこと
2023.10.24
最近、MySQLのデータベースを新しいサーバに移行させるという仕事がありまして、SQL文にエクスポートをしたファイルを新しいサーバにインポートしようとしたのですが、その時に発生したことをメモしておきたいと思います。
なんとなくこの辺りに問題があるのかなと予測がつくようなものではありますが、念の為。
いきなり CREATE TABLE でエラー
TYPE=MyISAMでNG
バージョンが新しいMySQLでは、
TYPE=MyISAM → ENGINE=MyISAM
TYPE=InnoDB → ENGINE=InnoDB
とのことでした。
エクスポートしたSQLを一括置換でOK。
Duplicate entry hogehoge for key 'hogehoge'
みたいなアラートが出て、インポートが途中で止まる
Duplicate entryということなので、重複エラーということがわかりますが、元々前のデータベースで稼働していたので、重複するはずがないですよね。新しいサーバのデータベースはまっさらの状態なので、データは存在していませんし。
で、とりあえずエラーの発生したテーブルを見てみました。それは、同じ言葉でも半角と全角などが混ざることで書き方の違うテキストを統一させるための名寄せに使っていたテーブルでした。
hair、Hair、hairとか、いろんな書き方ができますが、全部同じ意味ですよね。そこで、あああ~って来ました。
そうなんです。新しく作成したデータベースの方は半角全角などの違いを区別しない状態、以前のデータベースは区別していた状態だったんです。
create database hogehoge
character set utf8mb4
collate utf8mb4_bin;
とデータベースを作成し直しました。
collate utf8mb4_general_ci
A、a→区別しない
絵文字→区別しない
は、ぱ、ば→区別する
よ、ょ→区別する
collate utf8mb4_unicode_ci
A、a→区別しない
絵文字→区別しない
は、ぱ、ば→区別しない
よ、ょ→区別しない
collate utf8mb4_bin
A、a→区別する
絵文字→区別する
は、ぱ、ば→区別する
よ、ょ→区別する
みたいな違いがあるんですよね。要メモです。
インポート時DATE型のカラムでなんやらエラーが発生
バージョンが新しいMySQLでは、サポートしている範囲は '1000-01-01' から '9999-12-31' です、とあります。
前のMySQLでは、DATE型のカラムにデフォルト値「0000-00-00 00:00:00」が設定されていて、その値が入っているデータがいくつかありまして、それでエラーが発生していたようでした。
削除されているデータだったり、日付を変更しても内容に問題ないデータだったので、1000-01-01 00:00:00に置換してインポートしました。
とりあえずデータの移行は大きなトラブルなく終わレそうです。ただ、プログラム側のPHP7→PHP8への移行がまだ残っているのだ・・・。それについては、また後日。
【メモ】Jqueryでselectのselectedを取得
2023.10.15
例えば、ウェブサイトでプルダウンを変更した際に、値によって文字の色を変えたい時などに用います。
こんなselectを用意します。
<select id="selectColor">
<option data-color="#000" value="1">黒</option>
<option data-color="#F00" value="2">赤</option>
<option data-color="#00F" value="3">青</option>
</select>
次にJQueryで
$(document).on( 'change', '#selectColor', function(){
$(this).css( 'color', $(this).find('option:selected').data('color') );
} );
選択しているoptionは、「option:selected」で取得できます。
【メモ】tableのカラム幅がwidth指定しても固定されない場合
2023.08.30
あるあるですが、記載の仕方を忘れることがあるので、メモ。
特にPHPなどで動的にtableを作成する場合によくありますよね。thやtdの幅をwidthで指定しているのに、上手く幅指定が出来ていないこと。そういった場合の対処法です。
table-layout: fixed;
カレンダーを動的に作る時などに、幅を固定する際、
th.week, td.week {
width: calc( 100% / 7 );
}
よくある方法ですが、tdの中に動的に文字(文字数がどれくらいになるかわからない時)を入れたりすると、結構レイアウトが崩れます。その時は、最後の手段「table-layout: fixed;」で解決できることがあります。
どうしても固定されないなら、動的に文字の入るブロック要素に
white-space:nowrap;
overflow:hidden;
text-overflow: ellipsis;
で、はみ出る文字を消す、かな。
【メモ】JQueryで読み込み時とリサイズ時にイベント発動
2023.08.19
たまに忘れちゃうので、メモ。
二つ以上のイベントで同じ処理を行いたい時の書き方。レスポンシブ・ウェブ・デザインで、CSSで対応が面倒な場合に使うので。
$(window).on( 'load resize', function(){
//何らかの処理
}
デジタルトランスフォーメーションって?システム化との違い
2023.07.27
いわゆる単純なシステム化とデジタルトランスフォーメーションの違いをちょっとした例をあげて説明したいと思います。
システム化
ある小売業の店舗を運営しているとします。これまでは、在庫管理や売上記録を手書きで行っていました。しかし、これでは時間がかかり、在庫が足りない場合もあれば、余分な商品がたくさん残る場合もありました。
そこで、POSシステム(Point of Sale)を導入することで、商品の売上と在庫を自動的に記録できるようにしました。これにより、売上の正確な把握や在庫の最適化が可能になり、効率が向上しました。
デジタルトランスフォーメーション
次に、デジタルトランスフォーメーションの例を見てみましょう。同じ小売業の店舗ですが、今度は全体的な変革を行います。
まず、オンラインショッピングサイトを立ち上げ、顧客は商品をオンラインで閲覧し、購入することができるようになりました。さらに、顧客情報をデータベース化し、購買履歴や嗜好を把握することで、ターゲットマーケティングが可能になりました。
また、顧客の問い合わせにはAIチャットボットを導入し、24時間いつでも対応できるようにしました。これにより、顧客対応の効率が大幅に向上しました。
さらに、販売データや顧客フィードバックを分析し、新商品の開発や販売戦略の最適化を行いました。これによって、顧客満足度の向上や市場競争力の強化が実現しました。
まとめ
システム化は特定の業務を効率化するための具体的な取り組みであり、例えばPOSシステムの導入がその一例です。一方、デジタルトランスフォーメーションは、全体的なビジネスモデルや運営プロセスをデジタル技術を活用して根本的に変革し、企業の競争力を強化する取り組みであり、例えばオンラインショッピングやAIチャットボットの導入がその一環です。
どちらも重要な取り組みですが、規模や目的によって選択するべきアプローチが異なります。