tree-tips
カテゴリ
広告
MySQL
広告
MySQL
MySQLでユニークキーとフィールド長制限を拡張する
ユニークキーのフィールド長制限についての注意。MySQLのユニークキーは以外とフィールド長の制限が厳しく、要件が満たせない場合が多いので、対応策を検討します。暗号化した個人情報等を保存したい場合等に効果を発揮します。
ブログも書いてます! 文系プログラマによるTIPSブログ:最新記事
- Sun Sep 09 15:23:45 UTC 2018:IT業界でプライベートで勉強するかどうかの理想と現実
- Wed Aug 01 17:00:58 UTC 2018:macでredis serverをインストールせずにredis-cliのバイナリをビルドしてプロジェクトに組み込む
- Thu Jun 14 00:00:15 UTC 2018:GAE/Node.js Standard Environmentでスピンアップからテキストが返るまでの速度をゆる〜く確認する
- Tue May 08 15:31:53 UTC 2018:angular v6にアップデートした際に起きたエラーの対応
- Wed Oct 03 16:05:31 UTC 2018:create-react-appのESLint or TSLint + Prettier設定とファイル保存時のPrettier+Lint自動実行設定
- Wed May 02 08:08:20 UTC 2018:GAE/Node.js Standard Environmentは現在pre betaのようです
- Mon Apr 09 04:06:02 UTC 2018:PWAで「ホーム画面に追加」が表示されない時に確認する事
- Wed Apr 04 17:48:40 UTC 2018:AngularでElectron起動時にトップページが404になってしまう件に対応する
- Thu Apr 05 08:48:23 UTC 2018:SSR無しのReact・Angular製のSPAサイトはGooglebotにどれくらい認識されるのか?
- Thu Mar 22 14:11:51 UTC 2018:webpack v3からv4へアップデートした時に発生したエラーと対応
- Mon Jan 15 15:23:23 UTC 2018:GAE/Java+Angular5+@angular/service-workerでSPA・PWA・SEOに対応する
- Sun Nov 05 07:33:05 UTC 2017:Python Pillow-SIMDで並列画像変換するDockerイメージ用意したよ〜
- Sun Nov 05 05:58:46 UTC 2017:s3への画像配置でAWS LambdaのPython3.6+Pillow-SIMDで複数サムネイル生成する
- Sun Oct 29 02:07:03 UTC 2017:s3への画像配置でAWS LambdaのPython3.6+Pillowで複数サムネイル生成する
- Sat Oct 28 13:46:39 UTC 2017:docker image版amazonlinuxをec2版amazonlinuxのように使ってansibleでプロビジョニングする
- Tue Oct 17 17:55:20 UTC 2017:failed to build: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)に対応する
- Mon Oct 09 12:30:46 UTC 2017:新サイトstring-utilityをリリースしました
- Sun Sep 24 14:42:35 UTC 2017:GAE/Java8+kotlin+Spark Frameworkをデプロイするまでに起きたエラーのまとめ
- Sun Sep 24 13:05:31 UTC 2017:GAE/Java8+kotlin+Spark Frameworkでスピンアップからjsonが返るまでの速度をゆる〜く確認する
- Sun May 27 09:30:54 UTC 2018:angular-materialでスクリーンサイズによって自動的にサイドナビを開閉させる
- Sun Sep 17 15:48:29 UTC 2017:GAEのマネージドセキュリティで無料の自動更新SSL証明書を適用しよう!
- Thu Sep 07 17:20:09 UTC 2017:macOS SierraでAudirvana Plus v3のDirect Modeを有効にする手順
- Mon Aug 28 15:26:23 UTC 2017:Audirvana Plusのアップデート時にread-only volumeと言われUpdate Errorが起きる際の対応
- Sun Aug 27 16:50:48 UTC 2017:macでIntelliJ IDEAのアップデート時に権限エラーが起きる時の対応
- Fri Aug 18 12:32:32 UTC 2017:Youtubeの新UIにPolymerが使われ、Web Componentsが本格始動するのか!?
- Fri Aug 18 10:34:35 UTC 2017:chromeバージョン62のセキュリティ強化ではてなブログがますます不利になります
- Thu Aug 17 14:38:03 UTC 2017:Vivaldiブラウザでトニー君の横スクロールアクションゲームを遊ぶ
- Thu Aug 17 05:39:10 UTC 2017:新卒をググってコピペするだけのマシーンにさせないために
- Mon Aug 14 18:22:13 UTC 2017:Vivaldiブラウザがいい感じに仕上がってきているかもしれない
- Mon Aug 07 16:27:11 UTC 2017:EOLを迎えるapache2.2を2.4にアップグレードしよう!
treeからのお知らせ
新サイト、tree-mapsを公開しました!!
tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!
地図に関するWEB TOOL専門サイトです!!
大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!
◯ 広告
ユニークキーの制限は?
ユニークキーには最大フィールド長が決まっています。
それぞれの文字コードでの最大フィールド長は以下の通りです。
ascii | UTF8 | UTF8MB4 |
---|---|---|
767 ÷ 1byte = 767byte | 767 ÷ 3byte = 255byte | 767 ÷ 4byte = 191byte |
よく以下のようなエラーを目にする事があるかと思います。
mysql> create table s0(c1 varchar(256) unique) charset=utf8mb4; ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
よくある問題となるケースは?
メールアドレスを暗号化してユニークキーを貼る、という要件です
他にも、単純にUTF8MB4の場合は最大191文字までしか入力できなくなるので、256文字入れたい!というのは標準ではできません。
解決策は?
対策1:テーブルの文字コードをシングルバイトにする。 |
---|
mysql> create table s1(c1 varchar(767) unique) charset=ascii; Query OK, 0 rows affected (0.02 sec) |
おすすめしません。ER図上ではこのテーブルだけ文字コードが違う事に気付けないし、処理的に面倒になる可能性が高いです。 |
対策2:カラムの文字コードをシングルバイトにする。 |
---|
mysql> create table s2(c1 varchar(767) charset ascii unique) charset=utf8mb4; Query OK, 0 rows affected (0.01 sec) |
おすすめしません。ER図上ではこのカラムだけ文字コードが違う事に気付けないし、ER図のメンテが難しくなります。 |
対策3:カラムを分割してそれら全てにユニークキーを貼る。 |
---|
mysql> create table s3(c1 varchar(191),c2 varchar(191),unique key (c1, c2)) charset=utf8mb4; Query OK, 0 rows affected (0.02 sec) |
おすすめです!ER図上で非常に解りやすく、ユニークキーの意図が伝わり易く、ER図のメンテも容易です。 例えばメールアドレスの aaa@bbb で、aaaとbbbをカラム分割してユニークキーを貼ればいいかと思います。 |
treeおすすめの書籍です! |
||
【送料無料】実践ハイパフォ-マンスMySQL第2版 |
【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド |
【送料無料】基礎からのMySQL改訂版 |
◯ 広告