import hashlib,json
BINARY_TYPES={'binary','varbinary','blob','tinyblob','mediumblob','longblob','bit'}
def canonical_row(values):
    return json.dumps(values,ensure_ascii=False,separators=(',',':'),allow_nan=False).encode('utf8')
def row_digest(values):
    return hashlib.sha256(canonical_row(values)).digest()
def quote_identifier(name):
    return chr(96)+name.replace(chr(96),chr(96)*2)+chr(96)
def select_expression(column):
    q=quote_identifier(column['COLUMN_NAME'])
    if column['DATA_TYPE'].lower() in BINARY_TYPES:return 'HEX('+q+')'
    return 'CAST('+q+' AS CHAR CHARACTER SET utf8mb4)'
