"性"という文字で終わる忘れがちなIT用語

検索しようにも、ひっかけるためのキーワードが出てこない時あるので。
(後1つ書きたいのだが思い出せない…。)

可塑性

個体に力を与えたことで変形した後、力が取り除かれても元に戻らずに変形する性質のこと
IT用語で使われることないとのことだが、何か勉強してた際に書いていた。
(暗号絡みで書かれていたと思っていたのだが、勘違いか・・・?)
「可塑性」と「塑性」の違いとは?分かりやすく解釈 | 意味解説辞典

Windows10のEOL

適応しているパッチにより異なる。
それでも、2023年1月において、最長2025年10月14日である。
learn.microsoft.com
なお、ダウンロード版は、2023年1月31日には発売終了する。
news.mynavi.jp

検索時に半角スペースなどが無視される場合がある

事象

画面で検索した際、MySQLに格納されている半角スペースが無視される場合がある。
加えて、ある画面の検索では無視されるのに、別画面の検索では無視されない。

原因

以下のいずれかに該当しているため

  • 利用している照合順序が異なるため
  • 検索条件が完全一致 or 部分一致の違いがあったため

解説

MySQLは、文字列の後ろにある半角スペースなどを比較から無視する機能が存在する。

MySQL 照合には、PAD SPACE または NO PAD の値を持つ pad 属性があります:
ほとんどの MySQL 照合には、PAD SPACE のパッド属性があります。
(中略)
・PAD SPACE 照合の場合、末尾のスペースは比較では重要ではありません。
 文字列は末尾のスペースに関係なく比較されます。
・NO PAD 照合順序では、他の文字と同様に、比較で末尾のスペースが重要として扱われます。

上記の通り、利用している照合順序によっては、無視されない。
例えば、utf8mb4の照合順序の場合、MySQL8.0のデフォルトエンコードutf8mb4_0900_ai_ciは無視されない(NO PAD)が、MySQL5.7のデフォルト照合順序ベースにしたい場合に用いるutf8mb4_general_ciの場合は無視される(PAD SPACE)。
[実行したSQL]

SELECT COLLATION_NAME, PAD_ATTRIBUTE 
FROM INFORMATION_SCHEMA.COLLATIONS 
WHERE COLLATION_NAME = 'utf8mb4_0900_ai_ci' 
OR COLLATION_NAME = 'utf8mb4_general_ci'; 

[SQLの結果]

COLLATION_NAME     PAD_ATTRIBUTE
utf8mb4_0900_ai_ci     NO PAD
utf8mb4_general_ci     PAD SPACE


また、PAD SPACEが有効な照合順序であっても、likeまでには適応されない。

このコンテキストの「比較」には、LIKE パターン一致演算子は含まれていません。
この演算子の末尾の空白は、照合に関係なく重要です。

上記引用元

dev.mysql.com

補記事項

PAD SPACEとは

ChAR型における文字列を埋める際の文字の事を指す。

CHAR 値は格納されると、指定された長さになるように右側がスペースで埋められます。

スペースは半角スペース(U+0020)を指す。
(確認してみたが、これを全角スペースなど別の文字にすることはできなさそう)
検索結果の挙動は以下の様になる。
[実行したSQL]

create table Test(id integer key auto_increment, title varchar(8)) COLLATE utf8mb4_general_ci;
insert into Test(title) values ("hoge"); -- 半角スペース無
insert into Test(title) values ("hoge "); -- 半角スペース1個
insert into Test(title) values ("hoge  "); -- 半角スペース2個
insert into Test(title) values ("hoge "); -- 全角スペース1個
insert into Test(title) values ("hoge  "); -- 半角スペース1個、全角スペース1個
select * from Test where title = 'hoge';

[検索結果]
全角スペースを含むと、検索結果からは除外された。

id	title
1	hoge
2	hoge 
3	hoge  
どうしても比較演算子で無視したくない場合

BINARY演算子を付加する

SELECT * 
FROM tbl1
WHERE BINARY col1 = 'hoge  ';
CHAR型の場合の追加ルール

char型を利用しているカラムについては、以下のルールも配慮する必要がある。

CHAR 値は格納されると、指定された長さになるように右側がスペースで埋められます。
PAD_CHAR_TO_FULL_LENGTH SQL モードが有効になっていないかぎり、CHAR 値が取り出されるときに、末尾のスペースが削除されます。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.3.2 CHAR および VARCHAR 型
但し、PAD_CHAR_TO_FULL_LENGTH自体は、現在は非推奨パラメータである。

MySQL 8.0.13 では、PAD_CHAR_TO_FULL_LENGTH は非推奨です。
MySQL の将来のバージョンで削除されることが予想されます。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.1.11 サーバー SQL モード

インデックスとか勉強するのによさげな資料

いずれも古いけど参考になる。
てかRDBオワコンと言われるから、この手の資料が更新されない
(知らないだけかもやけど、検索にぱっとひっかかってこない)

実践!!パフォーマンス・チューニング ~SQLチューニング編~
https://www.oracle.com/jp/a/tech/docs/technical-resources/100811-sql-tuning.pdf
実践!! パフォーマンス・チューニング ‐索引チューニング編‐ 【前編】
https://www.oracle.com/jp/a/tech/docs/technical-resources/index-tuning1.pdf
実践!! パフォーマンス・チューニング ‐索引チューニング編‐ 【後編】
https://www.oracle.com/jp/a/tech/docs/technical-resources/performance-tuning.pdf
いずれもOracle Databaseに関する解説であるが、他のDB扱う人にとって充分参考になる内容である。

3.4 ここは必ず対策しよう : HiRDB Version 10 パフォーマンスガイド
HiRDBなんて一般人は使う事そうそうないかもしれませんが、マニュアル(というより教則本)がしっかり作成されているので。
テーブルスキャンやINDEX FULL SCANなど丁寧に解説してくれている。
(とはいえ、上のOracleのガイドも充分丁寧なので、自分の好みで選ぶと良い)

MySQLのエディションの違い

## それぞれのエディション説明の公式ページ

Community Edition
MySQL :: MySQL Community Edition

Commercial Edition
MySQL :: MySQL製品

ホワイトペーパー
MySQL :: MySQL製品概要 紹介資料

### Community EditionとCommercial Editionの差異
正式に比較している資料が存在しない模様(見つけれないだけか)
Standard Edition(Commercial)にはパーティション機能がサポートされていないのに、Community Editionにはサポートされているのが意外だった。

## 各クラウドで利用しているエディション
AWS / Azure(※1) / GCP:Commercial Edition
※1 Azureは一部サービスでEnterrise Editionを利用可能
よくある質問 - Amazon RDS for MySQL | AWS
適切なデプロイの種類の選択 - Azure Database for MySQL | Microsoft Learn
Cloud SQL for MySQL の機能  |  Google Cloud

但し、全ての機能やパラメータが利用できる訳ではなく、制限をかけられている部分もある。
Amazon RDS での MySQL 機能のサポート - Amazon Relational Database Service
制限事項 - Azure Database for MySQL | Microsoft Learn

vimで検索や置換中にクリップボードの内容をペーストしたい

したいこと

Vimで検索や置換を行う際、クリップボードなどにコピーした内容を用いて検索したい

方法

内容 キーバインド
無名レジスタ(※1) Ctrl + r → "
選択範囲レジスタ(※2) Ctrl + r → * or Ctrl + +(※3)

※1 何も指定せずにヤンクした場合に貯められる領域
※2 通常クリップボードに貯められている領域
※3 通常は*を用いた方が良さげ、詳細はVimのマニュアルに記載

その他

  • 最近忘れがちなので記載(で、それを検索しようとしてみ見つけれない…)

AWS標準のFW・WAF機能

セキュリティグループ

  • ステートフル(※1)
  • IPおよびポート番号による制御
  • 無料

※1 通過した後の通信が戻ってくる際は、ルール関係なく許可

ネットワークACL

  • ステートレス(※2)
  • IPおよびポート番号による制御
  • 無料

※2 通過した後の通信が戻ってくる際も、ルールを再評価

AWS WAF

  • HTTPリクエストを監視
  • ルールを定義し、それを満たす場合に許可・拒否が可能
  • 有料(しかし、そこまで高くない)

AWS Shield

  • DDoS に対する保護サービス
  • Standardはデフォルト有効で透過的(※3)
  • Standardは無料、Advancedは有料
    • 追加の検出
    • 緩和策の提供
    • ほぼリアルタイムの可視性の提供

※3 Advancedは未調査

AWS Network Firewall

  • VPCに配置可能(但し、ネットワーク経路変更が必要)
  • 以下の3種類のルールを定義可能
    • 5-tuple(※4)によるフィルタリング(ステートフル、ステートレス)
    • ドメイン名によるフィルタリング (ステートフル)
    • Suricata互換の侵入防止ルール(ステートフル)
  • 有料

※4 送信元アドレス、宛先アドレス、送信元ポート番号、宛先ポート番号、プロトコル