i want to change table character set from 'utf8' to 'utf8mb4'
but each column has own character set setting(utf8)
so i need to change column character set to 'Table Default', but locking is the problem
help me to change column character set without table locking
there is over 100,000,000 rows in table
(MySQL 5.7.19 AWS RDS) how to change table column character set without locking
1.8k Views Asked by user5013462 At
1
There are 1 best solutions below
Related Questions in MYSQL
- GPIO Permission issue Nvidia Jetson AGX Xavier
- open cv shows green screen on jetson nano
- psplash-write does not work when psplash is started from the init script (PID=1)
- minicom throwing an error minicom: cannot open /dev/modem: No such file or directory
- Tensorflow uses CPU instead of GPU
- OSError: libcurand.so.10: cannot open shared object file: No such file or directory
- exec /usr/bin/bash: exec format error when 'docker run' an image on aarch64 host after 'docker buildx'
- Jetson Nano: Mounting NFS drives at Boot
- RTSP video feed and recording video with Gstreamer and Nvidia AGX Orin
- how to enable CUDA in ZED Orin Box
Related Questions in COLLATION
- GPIO Permission issue Nvidia Jetson AGX Xavier
- open cv shows green screen on jetson nano
- psplash-write does not work when psplash is started from the init script (PID=1)
- minicom throwing an error minicom: cannot open /dev/modem: No such file or directory
- Tensorflow uses CPU instead of GPU
- OSError: libcurand.so.10: cannot open shared object file: No such file or directory
- exec /usr/bin/bash: exec format error when 'docker run' an image on aarch64 host after 'docker buildx'
- Jetson Nano: Mounting NFS drives at Boot
- RTSP video feed and recording video with Gstreamer and Nvidia AGX Orin
- how to enable CUDA in ZED Orin Box
Related Questions in TABLE-LOCK
- GPIO Permission issue Nvidia Jetson AGX Xavier
- open cv shows green screen on jetson nano
- psplash-write does not work when psplash is started from the init script (PID=1)
- minicom throwing an error minicom: cannot open /dev/modem: No such file or directory
- Tensorflow uses CPU instead of GPU
- OSError: libcurand.so.10: cannot open shared object file: No such file or directory
- exec /usr/bin/bash: exec format error when 'docker run' an image on aarch64 host after 'docker buildx'
- Jetson Nano: Mounting NFS drives at Boot
- RTSP video feed and recording video with Gstreamer and Nvidia AGX Orin
- how to enable CUDA in ZED Orin Box
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
"Character set" is the encoding of the characters in bytes.
"Collation" is how to sort characters.
An
INDEX
on aVARCHAR
is sorted by its collation, so changing the collation of a column requires rebuilding an index -- a non-trivial operation.The difference between utf8 and utf8mb4 is relatively minor, but I don't think MySQL (hence RDS) has made a special case of that.
ALTER TABLE t CONVERT TO utf8mb4;
sounds like the operation that you desire. That requiresALGORITHM=COPY
, so it is 'locking'.Look into
pt-online-schema-change
andgh-ost
as a way of altering a table, even when it needs to "copy". These are essentially non-blocking. However, I do not know if they can be used with RDS. Also, because ofJOINs
and other cases where one table may need to be consistent with another, those tools may not be practical.Another approach... Add another column(s); change your code to use both the old and new column(s). Meanwhile, gradually copy the old values to the new column(s); when this is finished, change your code again -- this time to use the new column(s) instead of the old. At some later date, worry about dropping the dead column(s).
Recent versions of MySQL have made significant changes in the speed of
ALTER
, so be sure to study what version RDS is derived from. In 5.6,ADD COLUMN
can useALGORITHM=INPLACE
; in 8.0,ALGORITHM=INSTANT
. I think either of those is non-"locking" for your purposes. (DROP COLUMN
is not cheap; the issues withJOIN
and rebuilding indexes are still up in the air.)If you try one of these techniques, I strongly recommend you build a table with at least a million rows and try out all the steps (alter add, join, recreate index, alter drop column, etc) to verify what parts are "fast enough" and/or "non-locking".